Android намерен открыть карты Waze и Google

Есть несколько похожих сообщений, но я не нашел точного. в основном, я хочу открыть как карты Google, так и Waze с тем же намерением. Сначала я попробовал это:

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f", latitude, longitude);
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

Waze переместился прямо в нужное место, и карты Google открыли нужное место. то я понял, что карты Google не помещают булавку на место, поэтому пользователю трудно узнать, где именно. Поэтому я огляделся и понял, что для карт Google требуется "? Q =.. (метка)" для этого... Я сменил конструкцию uri на:

final String uri = String.format(Locale.ENGLISH, "geo:%f,%f?q=%f,%f (%s)", latitude, longitude, latitude, longitude, name);

Но затем Waze сделал 2 вещи: переместился в нужное место И запустил поиск на ярлыке. Это потребовало от пользователя нажать кнопку "Назад", чтобы закрыть экран результатов поиска и остаться с навигацией в нужном месте.

Я везде искал ответ, но не нашел решения, которое достигнет обоих. Сначала я думал, что это невозможно, и у Waze есть ошибка... но потом я заметил, что Facebook-мессенджер делает именно то, что я хочу. при нажатии на сообщение с местоположением он откроет оба приложения: карты Google будут иметь штырь (с меткой), и Waze будет перемещаться прямо в это место, не выполняя поиск.

Несколько вопросов о вышеуказанном: 1. (Конечно) Как я могу это достичь? 2. Как я могу узнать, как строится намерение Facebook-мессенджера? (Могу ли я его поймать) 3. В чем причина наличия метки только с параметром "? Q =.."?

Спасибо

Ответ 1

Ничего. Я смог перехватить Facebook-мессенджер с приведенным ниже приложением и понял, что URI должен быть следующим:

String.format(Locale.ENGLISH, "geo:0,0?q=") + android.net.Uri.encode(String.format("%[email protected]%f,%f", label, latitude, longitude), "UTF-8");

Приложение: https://play.google.com/store/apps/details?id=uk.co.ashtonbrsc.android.intentintercept&feature=search_result#?t=W251bGwsMSwyLDEsInVrLmNvLmFzaHRvbmJyc2MuYW5kcm9pZC5pbnRlbnRpbnRlcmNlcHQiXQ..

Спасибо

Ответ 2

Следуя совету Nimrod, я установил приложение и перехватил намерение с помощью функции местоположения whatsapp. Здесь полный Intent проверен на картах и ​​waze:

String uri = "http://maps.google.com/maps?q=loc:"+latitude+","+longitude+" ("+label+")";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.setData(Uri.parse(uri));
startActivity(intent);

Ответ 3

Мое окончательное решение для открытия приложений Waze и GoogleMap для получения направления (работает как шарм):

 String uri = "";
    Intent intent;
    try {

        uri = String.format(Locale.ENGLISH,"geo:" + location.getLat() + "," +location.getLng() + "?q=" + location.getLat()+","+location.getLng()+" ("+location.getName()+")");
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    } catch (ActivityNotFoundException ex) {
        try {
            Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
            startActivity(unrestrictedIntent);
        } catch (ActivityNotFoundException innerEx) {
            getSnackbar(getResources().getString(R.string.map_install_application), Snackbar.LENGTH_LONG).show();
        }
    }