为什么这个 PendingIntent 在 android 12 上不起作用

问题描述 投票:0回答:1

请阅读下面的 PendingIntent 并针对我的项目进行更正。

广播类:

intent = new Intent(context, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

主要活动:

pendingIntent = PendingIntent.getBroadcast(this, 0, intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
        

更正 PendingIntent,因为应用程序在 Android 12 上崩溃

日志猫:

FATAL EXCEPTION: Thread-6

08-11 16:41:53.695 E/AndroidRuntime(6004):进程:com.sk.spico,PID:6004 08-11 16:41:53.695 E/AndroidRuntime( 6004): java.lang.IllegalArgumentException: com.sk.spico: 面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。 08-11 16:41:53.695 E/AndroidRuntime(6004):强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 可变时才使用 FLAG_MUTABLE,例如如果需要与内联回复或气泡一起使用。 08-11 16:41:53.695 E / AndroidRuntime(6004):在android.app.PendingIntent.checkFlags(PendingIntent.java:382) 08-11 16:41:53.695 E / AndroidRuntime(6004):在android.app.PendingIntent.getActivityAsUser(PendingIntent.java:465) 08-11 16:41:53.695 E / AndroidRuntime(6004):在android.app.PendingIntent.getActivity(PendingIntent.java:451) 08-11 16:41:53.695 E / AndroidRuntime(6004):在android.app.PendingIntent.getActivity(PendingIntent.java:415) 08-11 16:41:53.695 E/AndroidRuntime(6004):位于 com.facebook.ads.internal.go.f(SourceFile:112) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.hb.a(SourceFile:60) 08-11 16:41:53.695 E/AndroidRuntime(6004):位于 com.facebook.ads.internal.hb.a(SourceFile:52) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.mo.a(SourceFile:113) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.mo.a(SourceFile:89) 08-11 16:41:53.695 E/AndroidRuntime( 6004): 在 com.facebook.ads.internal.mo.c(SourceFile:82) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.hu。(源文件:137) 08-11 16:41:53.695 E/AndroidRuntime(6004):位于 com.facebook.ads.internal.hw。(源文件:98) 08-11 16:41:53.695 E/AndroidRuntime(6004):位于 com.facebook.ads.internal.hw.a(SourceFile:76) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.gu.c(SourceFile:287) 08-11 16:41:53.695 E/AndroidRuntime( 6004):位于 com.facebook.ads.internal.gu.a(SourceFile:102) 08-11 16:41:53.695 E / AndroidRuntime(6004):在com.facebook.ads.internal.er.initialize(SourceFile:29) 08-11 16:41:53.695 E / AndroidRuntime(6004):在com.facebook.ads.internal.dynamicloading.DynamicLoaderFactory $ 1.run(源文件:17) 08-11 16:41:53.695 E / AndroidRuntime(6004):在java.lang.Thread.run(Thread.java:920)

查看代码并解决问题

android crash android-pendingintent android-12
1个回答
0
投票

可能是因为我认为

PendingIntent.FLAG_UPDATE_CURRENT
PendingIntent.FLAG_IMMUTABLE

不兼容

PendingIntent.FLAG_UPDATE_CURRENT
是:-

指示如果所描述的 PendingIntent 已经存在,则保留它,但用这个新 Intent 中的内容替换其额外数据。

但是

PendingIntent.FLAG_IMMUTABLE
是:-

指示创建的 PendingIntent 应该是不可变的标志。

即无法更改,因此无法更新

以 S+(版本 31 及更高版本)为目标选择错误的 PendingIntent 类型是相当常见的问题

尝试使用

PendingIntent.FLAG_MUTABLE
来代替,然后挂起的意图可以通过更新更改。

© www.soinside.com 2019 - 2024. All rights reserved.