当瞄准Android 12时,应用程序因为pendingIntent而崩溃



应用程序崩溃,因为附近的消息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添加了PendingIntent.FLAG_MUTABLEPendingIntent.FLAG_IMMUTABLE标志,也会发生这种异常

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-services-nearby

implementation 'com.google.android.gms:play-services-nearby:18.0.0'
  1. 这听起来很奇怪,但修复是添加工作管理器依赖2.7.0+:implementation "androidx.work:work-runtime:2.7.0"

  2. 你必须更新依赖,应该支持Android 12制动变化(我不得不更新一些第三方)。查看github和文档页面

  3. 另外,一些库正在使用Android 12所需的权限<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>。请查看此权限的文档

  4. 另外,查看google的问题跟踪器,查看与Android 12相关的google库特定问题

也许我错过了什么,但所有这些都帮助我迁移。祝你好运:)

安装Xamarin.AndroidX.work.runtime 2.7.0解决了这个问题。请确保你有正确的版本,这样你就不会像我一样遇到一些问题。鳕鱼快乐! !

我能够通过添加Xamarin.AndroidX.work.runtimeNuGet包来解决Xamarin项目的这个问题。

单独更新依赖项应该可以解决这个问题。18.1.0+似乎修复了这个问题(查看反编译代码),而17.0.0没有。(不确定两者之间的版本)

implementation("com.google.android.gms:play-services-base:18.1.0")

相关内容

最新更新