在Android 12上,关于Pending Intent的使用出现了一些变化。在Pending Intent的构造函数中,需要提供一个IntentSender参数,而不是直接提供Intent。下面是一个示例代码片段,演示如何在Android 12上创建一个Pending Intent。
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
IntentSender intentSender = pendingIntent.getIntentSender();
intent = new Intent();
intent.putExtra("extra_key", "extra_value");
// flags参数包含了Android 12 Pending Intent的一些新特性,比如可见性以及背景限制
PendingIntent newPendingIntent = PendingIntent.getIntentSenderInstance(this, intentSender, intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT, /*fillInIntent=*/null, /*options=*/null);
} else {
// Android 12之前的版本使用以前的Pending Intent构造函数即可
PendingIntent oldPendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}