Как проверить совместимость Сервисов Google Play во время выполнения? - PullRequest
1 голос
/ 12 марта 2020

У меня есть приложение Android, которое использует Google com.google. android .gms.maps.SupportMapFragment. В некоторых эмуляторах возникает проблема, когда вместо отображения карты отображается следующее сообщение

У вашего имени приложения проблемы с Сервисами Google Play. Пожалуйста, попробуйте еще раз.

Я проверил журналы и обнаружил следующее сообщение

GooglePlayServicesUtil: сервисы Google Play устарели. Требуется 13400000, но найдено 12862027

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

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

Вот зависимость от карт, которую я использую в сборке .gradle

implementation "com.google.android.gms:play-services-maps:17.0.0"

И в моем верхнем уровне build.gradle у меня есть следующая зависимость (хотя я думаю, что эта только требуется Firebase

classpath 'com.google.gms:google-services:4.3.3'

Я также добавил Google Версия сервисов воспроизведения в моем Манифесте, как описано ниже.

Итак, это настройка проекта, теперь вот что я пытался определить, совместимы ли Сервисы Google Play с моей версией SDK для карт во время выполнения:

Вызов

GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(applicationContext)

всегда возвращает ответ "успех", но когда я запускаю следующее действие, которое содержит мой SupportMapFragment, я все еще вижу сообщение об ошибке.

I ' мы также пытались позвонить

GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(applicationContext, version)

Я не совсем уверен, должен ли я передавать версию клиента, возвращаемую

GoogleApiAvailability.getInstance().getClientVersion()

Или если я может быть передана версия APK, возвращаемая

GoogleApiAvailability.getInstance().getApkVersion(applicationContext)

Если я должен передать целое число сервисов Google Play, которое я добавил в свой манифест

        <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

, которое разрешается в значение 12451000 в значения зависимости "play-services-basement". xml file

Во всех случаях я все еще получаю успешный ответ от проверки isGooglePlayServicesAvailable () и все еще вижу ошибку в SupportMapFragment.

getClientVersion()

возвращает значение 12451000

getApkVersion()

возвращает значение 12862027

Поскольку состояние журналов:

Требуется 13400000, но найдено 12862027

, где откуда приходит 13400000? Кажется, я не могу «вернуть» это значение из класса GoogleApiAvailability, и AFAIK Я не устанавливаю это значение явно ни в одном из моих кодов.

Что я делаю неправильно? Как я могу убедиться, что версия Google Play Services может поддерживать версию SDK карт, которую я использую во время выполнения?

Редактировать: если я изменю свою зависимость play-services-maps с 17.0.0 на 16.0. 0, карты отображаются, как и ожидалось, на эмуляторе. Так что проблема не в том, что эмулятор не может отображать карту когда-либо, просто в нем не отображается 17.0.0, а проверка, которую я пытаюсь выполнить, не работает.

...