Как Google MapsActivity может привести к исключению ClassNotFoundException на телефоне Samsung? - PullRequest
0 голосов
/ 25 марта 2019

Вчера я получил самую странную ошибку в консоли Google Play.

У меня есть кнопка, которая открывает направления в приложении Google Map.Было это годами.Похоже на это:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
                Uri.parse("http://maps.google.com/maps?f=d&daddr=" +
                    lat + "," + lon));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
            activity.startActivity(intent);

Вчера я получил этот журнал ошибок:

Samsung Galaxy J6+ (j6primelte), Android 8.1
android.content.ActivityNotFoundException: 

Я не могу для всего мира понять, как это может произойти, и я никогда не видел этого раньше.Кто-нибудь знает больше меня?

РЕДАКТИРОВАТЬ: Очевидно, я знаю, что я могу попытаться поймать его.Это не мой вопрос.Я задавался вопросом, как на Samsung можно получить ActivityNotFound для чего-то в API карт Google.Единственное, о чем я могу думать, это о рутированном телефоне?

Эта кнопка плавает в верхней части карты Google, и мы проверяем сервисы Google Play при запуске приложения, поэтому вы не сможете добраться до этой точки, если неуже видите карту Google в приложении.

Ответы [ 2 ]

1 голос
/ 31 марта 2019

«Возможность показать карту Google» и «приложение Google Maps установлено» - это не одно и то же.Очевидно, что у вашего пользователя установлены сервисы Play Services (используемые для встраивания карты в ваше приложение), но не Google Maps.Предположительно, он или она рутировал телефон и установил другое ПЗУ без Google Maps.Как правило (как вы теперь можете видеть) не стоит предполагать, что приложения будут установлены на телефоне в дикой природе.

Вот мой код для проверки:

public void showDirections(String address, FragmentActivity activity) {

    address = Uri.encode(address);
    Uri gmmIntentUri = Uri.parse("google.navigation:q=" + address);
    Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
    mapIntent.setPackage("com.google.android.apps.maps");

    if (mapIntent.resolveActivity(activity.getPackageManager()) == null) {
        DialogUtils.getInstance(activity).reportError(activity, "Google Maps is required for this feature");
        return;
    }

    activity.startActivity(mapIntent);
}
1 голос
/ 25 марта 2019

Убедитесь, что введите свой код,

try {

    //Put your code here

    } catch (Exception e) {
        e.printStackTrace();
    }

Потому что, когда вы устанавливаете намерение открыть определенное приложение, может быть, это приложение не установлено на этом устройстве (в вашем случае телефон Samsung), так что ниже calss не найдено и оно выдает исключение.

intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...