Подавление диалога выбора целей Google Maps - PullRequest
6 голосов
/ 03 июля 2011

Когда я использую этот код

   string url = "somegooglemapsurl.com";
   Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW,  Uri.parse(url));
   startActivity(mapLauncherIntent);

Появляется диалоговое окно выбора, спрашивающее, хочу ли я открыть эту карту в приложении карт или в браузере.Мне бы хотелось, чтобы переход от активности приложения к Google Maps был плавным.Как я могу отключить это диалоговое окно и сказать андроиду открыть карту в активности карт?

РЕДАКТИРОВАТЬ: Когда я попадаю в Google Maps, я хочу открыть подсказку направлений, используя общественный транспорт в определенном месте.Я могу сделать это через URL-адрес карты Google, но URL-адрес вызывает диалог выбора.

Ответы [ 3 ]

17 голосов
/ 19 августа 2011

Я не нашел идеального решения, но это, по крайней мере, откроет карты с правильным пунктом назначения и предварительно выбранным общественным транспортом.Тогда все, что нужно сделать пользователю, это нажать кнопку направления.

Он также проверяет, установлена ​​ли карта Google, и предпочитает использовать ее в этом случае.

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?daddr=0,0%20(Imaginary%20Place)&dirflg=r"));
if (isAppInstalled("com.google.android.apps.maps")) {
    intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
}
startActivity(intent);

// helper function to check if Maps is installed
private boolean isAppInstalled(String uri) {
    PackageManager pm = getApplicationContext().getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}
6 голосов
/ 11 июля 2011

Вот различные методы, которые я нашел до сих пор:

1. Непосредственно начать навигацию:

Это явное намерение напрямую запустит Google Navigation:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=my+street+address");
startActivity(intent);

Это непосредственно запустит навигацию (к сожалению, без предоставления пользователю выбора транспортных средств)

.

2. Разрешить пользователю выбрать транспортное средство:

Это запустит приложение навигации Google, но позволяет пользователю выбрать средство перед началом навигации:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps/?daddr=my+street+address");
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

.

3. Начать на карте Google:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=my+street+address");
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Это запустит Карты, откуда пользователь может начать навигацию (и выбрать режим транспортировки).

Во всех случаях вы должны либо использовать PackageManager и queryIntentActivities (), либо обработку исключений для обработки случаев, когда у пользователя не установлены Google Maps / Navigation.

В моем приложении я использую метод 2, который работает просто отлично. Надеюсь, это поможет.

Надстройка: вот способ проверить, установлено приложение или нет. Я использую это, чтобы проверить, установлено ли com.google.android.apps.maps "перед вызовом intent.setClassName ().

public static boolean isAppInstalled(String uri) {
    PackageManager pm = getContext().getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}
0 голосов
/ 03 июля 2011

Прежде всего, я просто укажу, что избавление от этого диалогового окна выбора не обязательно является хорошей вещью.Вы хотите предоставить пользователю как можно больше выбора в том, как он обрабатывает данные, это является частью красоты экосистемы Android.Тем не менее, будет несправедливо судить без понимания вашего приложения, поэтому ...

Вы можете использовать протокол geo:

http://developer.android.com/guide/appendix/g-app-intents.html

Вместо этогопередать что-то вроде maps.google.com/blablabla, отформатируйте ваш URI следующим образом geo:0,0?q=my+street+address.

Пример:

Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=1111+imaginary+dr"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...