Chooser Intent, который проверяет, есть ли приложение по умолчанию

Поскольку Waze а также Google Maps есть разные URI formatsМне нужно создать два отдельных намерения, чтобы убедиться, что приложения будут перемещать пользователя в правильное местоположение.

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

Как иметь два URI для отдельных приложений, но при этом иметь одинаковый интерфейс, как при запуске намерения с ACTION_VIEW параметр?

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

if (!StringUtils.isEmpty(address)) {
    String q = address + "&mode=d&navigate=yes&geo=" + address + "&ll=" + address;
    String urlWaze = "https://waze.com/ul?q=" + q;
    Intent wazeIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlWaze));

    String urlGoogle = "google.navigation:q=" + q;
    Intent googleMapsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlGoogle));
    googleMapsIntent.setPackage("com.google.android.apps.maps");

    String title = getActivity().getResources().getString(R.string.choose_navigation_app);
    Intent chooserIntent = Intent.createChooser(wazeIntent, title);
    Intent[] arr = new Intent[1];
    arr[0] = googleMapsIntent;
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr);

    getContext().startActivity(chooserIntent);
} else {
    Toast.makeText(getContext(), getString(R.string.waypoint_not_have_geolocation), Toast.LENGTH_SHORT).show();
}

1 ответ

Решение

Как оказалось, Waze и Google Maps имеют очень разные URI и, чтобы решить ситуацию, описанную мной в моем вопросе, единственным решением было создание отдельных пользовательских настроек в моем приложении.

Другие вопросы по тегам