Намерение начать навигационную деятельность - PullRequest
27 голосов
/ 27 апреля 2011

В моем приложении у меня есть возможность начать навигацию к выбранной POI.В основном я хочу запустить пошаговый навигатор из моего приложения.Дело в том, что я не знаю, какой (если есть) навигатор установлен.

Итак, вопрос в том, как начать намерение, сначала показывая пользователю список подходящих действий для навигации, позволяя ему выбрать.какой он хотел бы использовать?Также было бы неплохо найти способ передать дополнительные параметры выбранной деятельности (для меня это звучит как проблема, так как разные навигационные приложения используют разные имена для своих дополнений, я думаю).

В случае, если неясно: Я ищу способ отобразить список подходящих приложений для навигации с возможностью сделать по умолчанию.

РЕДАКТИРОВАТЬ: Найти здесь реализацию http://datamoil.blogspot.com/2011/04/android-universal-intent-to-start.html

Ответы [ 4 ]

21 голосов
/ 27 апреля 2011

Плохая новость в том, что для навигации нет стандартного Intent URI.

Да, URI google.navigation существуют, и приложение может выбрать их поддержку.

Лучшее решение, которое я могу придумать, это:

  • Явная проверка на наличие известных приложений
  • Неявная проверка на наличие приложений, перехватывающих google.navigation: и возможно geo: (но тогда вы также получаете приложения карты)

Вы можете перечислить возможные неявные цели, используя PackageManage.queryIntentActivities

12 голосов
/ 27 апреля 2011

Попробуйте:

Intent intent = new Intent(Intent.ACTION_VIEW, 
    Uri.parse("google.navigation:q=New+York+NY")); 
startActivity(intent);
5 голосов
/ 26 марта 2012

Сначала я использовал свой метод onTap внутри слушателя кнопки:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=New+York+NY")); 
mContext.startActivity(i);

Тогда в манифесте просто используйте:

<activity android:name=".LaunchGPS" android:screenOrientation="portrait">
  <intent-filter>       
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Откроется любое приложение навигатора, которое есть на вашем телефоне, например VZ Navigagtor, Google или любое другое устройство, в которое загружен телефон. У меня сработало с первого раза отлично. Надеюсь, что это решит вашу проблему.

0 голосов
/ 13 октября 2017

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

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:"));
if (intent.resolveActivity(getActivity().getPackageManager()) != null)   {
    startActivityForResult(Intent.createChooser(intent, "Continues with:", CHOOSE_NAVIGATOR_ID);
} else {
   // Handle failure...
}
...