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)
当您想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)
你需要这样做:
pendingIntent = PendingIntent.getBroadcast(service, 0, new Intent(
action), PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_IMMUTABLE);
Run Code Online (Sandbox Code Playgroud)
既然您正在使用,AlarmManager您应该能够使用该IMMUTABLE标志。
| 归档时间: |
|
| 查看次数: |
26181 次 |
| 最近记录: |