当前位置: 首页 > 知识库问答 >
问题:

针对S(版本31及以上)要求指定FLAG_IMMUTABLE或FLAG_MUTABLE之一

姚洲
2023-03-14

应用程序在运行时崩溃,出现以下错误:

java.lang.非法参数异常:maa.abc:目标 S(版本 31 及更高版本)要求在创建挂起的意外时指定FLAG_IMMUTABLE或FLAG_MUTABLE之一。强烈建议使用FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 是可变的(例如,如果需要将其与内联回复或气泡一起使用)时才使用FLAG_MUTABLE。at android.app.待定智能检查旗(挂起的Intent.java:375) at android.app.PendingIntent.getBroadcastAsUser(待定智能.java:645) at android.app.挂起的Intent.getBroadcast(待定意图.java:632) at com.google.android.exoplayer2.ui.玩家通知管理器.createBrocastIntent(玩家通知管理器.java:1373) 在 com.google.android.exoplayer2.ui.玩家通知管理器.createPlayingActions(玩家通知管理器.java:1329) 在网站(玩家通知管理器.java:643) 在网站(玩家通知管理器.java:529) 在谷歌.机器人.exoplayer2.ui.玩家通知管理器.create与通知通道(玩家通知管理器.java:456) 在 com.谷歌.android.exoplayer2.ui.玩家通知管理器创建通知通道(玩家通知管理器.java:417)

我尝试了所有可用的解决方案,但该应用程序仍然在Android 12上崩溃。

 @Nullable
 @Override
 public PendingIntent createCurrentContentIntent(@NonNull Player player) {
        Intent intent = new Intent(service, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                        Intent.FLAG_ACTIVITY_SINGLE_TOP |
                        Intent.FLAG_ACTIVITY_NEW_TASK);
        return PendingIntent.getActivity(service, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

 }

共有3个答案

刘阳舒
2023-03-14

Kotlin的解决方案,如果你使用API M,只需添加这个标志

val flags = when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE
            else -> FLAG_UPDATE_CURRENT
        }
val toastPendingIntent = PendingIntent.getBroadcast(context, 0, providerIntent, flags)
汪永春
2023-03-14

检查并将 exoplayer 的依赖版本更新为最新版本

之前用于返回的< code > Android . app . pending content . get broadcast()

@Nullable
@Override
private static PendingIntent createBroadcastIntent(
    String action, Context context, int instanceId) {
    Intent intent = new Intent(action).setPackage(context.getPackageName());
    intent.putExtra(EXTRA_INSTANCE_ID, instanceId);
    return PendingIntent.getBroadcast(
        context, instanceId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  }

如果您仔细观察PendingIntent.FLAG_IMMUTABLE在上面的代码片段中缺少

现在已经更新,返回以下内容

@Nullable
@Override
private static PendingIntent createBroadcastIntent(
      String action, Context context, int instanceId) {
    Intent intent = new Intent(action).setPackage(context.getPackageName());
    intent.putExtra(EXTRA_INSTANCE_ID, instanceId);

    int pendingFlags;
    if (Util.SDK_INT >= 23) {
      pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
    } else {
      pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT;
    }

    return PendingIntent.getBroadcast(context, instanceId, intent, pendingFlags);
  }
施俊驰
2023-03-14

如果使用java或react-native,则将它粘贴到app/build.gradle中

dependencies {
  // ...
  implementation 'androidx.work:work-runtime:2.7.1'
}
 类似资料: