Android 12 待定意向

Dar*_*369 10 android android-pendingintent android-studio

面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 可变时才使用 FLAG_MUTABLE

我无法更新 android studio 项目编码中的挂起意图标志

这是AlarmPingSender.java中发生错误的地方

  public void start()        
   {       
   String action = MqttServiceConstants.PING_SENDER
            + comms.getClient().getClientId();
    Log.d(TAG, "Register alarmreceiver to MqttService"+ action);
    service.registerReceiver(alarmReceiver, new IntentFilter(action));

    pendingIntent = PendingIntent.getBroadcast(service, 0, new Intent(
            action), PendingIntent.FLAG_UPDATE_CURRENT);

    schedule(comms.getKeepAlive());
    hasStarted = true;
}
Run Code Online (Sandbox Code Playgroud)

帮助我解决 ANDROID STUDIO IMAGE 中的错误问题

Sha*_*ami 8

当您想PendingIntent在项目中创建任何一个时,请使用这两个公共方法

创建活动挂起意图

   public static PendingIntent createPendingIntentGetActivity(Context context, int id, Intent intent, int flag) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
             return PendingIntent.getActivity(context, id, intent, PendingIntent.FLAG_IMMUTABLE | flag);
         } else {
             return PendingIntent.getActivity(context, id, intent, flag);
         }
     }
Run Code Online (Sandbox Code Playgroud)

创建广播pendingIntent

 public static PendingIntent createPendingIntentGetBroadCast(Context context, int id, Intent intent, int flag) {
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
         return PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_IMMUTABLE | flag);
     } else {
         return PendingIntent.getBroadcast(context, id, intent, flag);
     }
 }
Run Code Online (Sandbox Code Playgroud)

科特林回答:

fun getActivity(context: Context?, id: Int, intent: Intent?, flag: Int): PendingIntent {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        PendingIntent.getActivity(context, id, intent, PendingIntent.FLAG_MUTABLE or flag)
    } else {
        PendingIntent.getActivity(context, id, intent, flag)
    }
}

fun getBroadcast(context: Context?, id: Int, intent: Intent?, flag: Int): PendingIntent {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        PendingIntent.getBroadcast(context, id, intent!!, PendingIntent.FLAG_MUTABLE or flag)
    } else {
        PendingIntent.getBroadcast(context, id, intent!!, flag)
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ser 6

你需要这样做:

pendingIntent = PendingIntent.getBroadcast(service, 0, new Intent(
        action), PendingIntent.FLAG_UPDATE_CURRENT |
                 PendingIntent.FLAG_IMMUTABLE);
Run Code Online (Sandbox Code Playgroud)

既然您正在使用,AlarmManager您应该能够使用该IMMUTABLE标志。

  • @AJW一般来说,如果您将“PendingIntent”提供给另一个应用程序,并且该应用程序在最终触发“PendingIntent”时需要添加/修改“Intent”,则需要使用“FLAG_MUTABLE”。 (3认同)
  • 您能够使用链接的解决方案解决您的问题吗? (2认同)