Вот различные методы, которые я нашел до сих пор:
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;
}