#android #google-play-services #google-nearby
Вопрос:
Приложение вышло из строя из-за близлежащего API сообщений при таргетинге на Android 12. Вот журнал сбоев
2021-10-07 18:59:44.916 10343-10384/com.example.nearbymessagescanner E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandler
Process: com.example.nearbymessagescanner, PID: 10343
java.lang.IllegalArgumentException: com.example.nearbymessagescanner: Targeting S (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458)
at android.app.PendingIntent.getActivity(PendingIntent.java:444)
at android.app.PendingIntent.getActivity(PendingIntent.java:408)
at com.google.android.gms.common.api.GoogleApiActivity.zaa(com.google.android.gms:play-services-base@@17.5.0:4)
at com.google.android.gms.common.GoogleApiAvailability.zaa(com.google.android.gms:play-services-base@@17.5.0:116)
at com.google.android.gms.common.api.internal.GoogleApiManager.zaa(com.google.android.gms:play-services-base@@17.5.0:252)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.5.0:109)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.onConnectionFailed(com.google.android.gms:play-services-base@@17.5.0:75)
at com.google.android.gms.common.internal.zai.onConnectionFailed(com.google.android.gms:play-services-base@@17.5.0:2)
at com.google.android.gms.common.internal.BaseGmsClient$zzf.zza(com.google.android.gms:play-services-basement@@17.5.0:6)
at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(com.google.android.gms:play-services-basement@@17.5.0:21)
at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzc(com.google.android.gms:play-services-basement@@17.5.0:11)
at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(com.google.android.gms:play-services-basement@@17.5.0:49)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.os.HandlerThread.run(HandlerThread.java:67)
Это исключение случается, даже если я добавил флаг PendingIntent.FLAG_MUTABLE
или PendingIntent.FLAG_IMMUTABLE
для PendingIntent
private fun backgroundSubscribe() {
Log.d(TAG, "Subscribing for background updates.")
val options = SubscribeOptions.Builder().setStrategy(Strategy.BLE_ONLY).build()
messagesClient.subscribe(pendingIntent, options)
}
private val pendingIntent: PendingIntent
get() = PendingIntent.getBroadcast(
this,
0,
Intent(this, BeaconMessageReceiver::class.java),
PendingIntent.FLAG_MUTABLE
)
Это пример приложения, которое может воспроизвести эту проблему, нажав кнопку «подписаться» в приложении.
Я использую версию 18.0.0 play-сервисов поблизости
implementation 'com.google.android.gms:play-services-nearby:18.0.0'
Комментарии:
1. Я сталкиваюсь с той же проблемой, несмотря на самую последнюю версию 17.6.0 в подвале в стеке. Я почти уверен, что код подвала, датированный 21 февраля, еще не готов для Android. Это внутренний PendingIntent, что-то связанное с ветвью onConnectionFailed.
Ответ №1:
- Это звучит странно, но исправление добавляет зависимость от менеджера работы 2.7.0 :
implementation "androidx.work:work-runtime:2.7.0"
- Вам необходимо обновить зависимости, которые должны поддерживать изменения в тормозах Android 12 (мне пришлось обновить некоторые сторонние приложения). Проверьте это на страницах github и документации
- Кроме того, некоторые библиотеки используют разрешение
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
, необходимое для Android 12. Пожалуйста, ознакомьтесь с документацией для получения этого разрешения - Кроме того, проверьте систему отслеживания проблем Google на наличие проблем, связанных с библиотекой Google, связанных с Android 12
Может быть, я что-то упустил, но все это помогло мне мигрировать. Удачи 🙂
Комментарии:
1. Привет @Слава Сотоне, спасибо за ваш комментарий. Я попробовал твое предложение. К сожалению, это не работает.
2. К сожалению, это тоже не работает 🙁
3. @apc Я обновил свой ответ. Вы могли бы проверить это, если это все еще проблема для вас
4. @TaxistSamael Спасибо за обновление, но в моем случае трассировка стека немного отличается, похоже, что внутри самой библиотеки сервисов Google Play существуют некоторые другие внутренние проблемы с зависанием. На данный момент это подтвержденная проблема: issuetracker.google.com/issues/206343771 , также я прекрасно понимаю, почему исправление во время выполнения работы работает для одного случая и не работает для другого. Вероятно, нам придется подождать исправлений… (в моем случае, для библиотеки в подвале)
5. @apc Тоже спасибо за вашу долю. Я согласен с вами. Я думаю, нам нужно подождать исправлений
Ответ №2:
Я смог решить эту проблему для проекта Xamarin, добавив Xamarin.AndroidX.work.runtime
пакет NuGet.