在我的应用程序中,我计划在每天的特定时间设置闹钟。为此,我正在使用警报管理器(请参阅下面的代码),这在 12 以下的 Android 设备上运行良好,但在 12 及更高版本上则不行
Firebase Crashlytics 上出现错误
以 S+(版本 31 及更高版本)为目标需要以下之一
创建时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE
待定意图。强烈考虑使用FLAG_IMMUTABLE,仅使用
FLAG_MUTABLE 如果某些功能依赖于 PendingIntent
可变的
谷歌崩溃错误 https://i.stack.imgur.com/8tCGy.png
这是我的代码
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Calendar cur = Calendar.getInstance();
if (cur.after(calendar)) {
calendar.add(Calendar.DATE, 1);
}
Intent myIntent = new Intent(mCon, DailyReminder.class);
int ALARM1_ID = 10000;
PendingIntent pendingIntent= PendingIntent.getBroadcast(mCon, ALARM1_ID, myIntent, PendingIntentFLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) mCon.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
我通过网络并显示以下解决方案
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent= PendingIntent.getBroadcast(mCon, ALARM1_ID, myIntent, PendingIntent.FLAG_IMMUTABLE);
} else {
pendingIntent = PendingIntent.getBroadcast(mCon, ALARM1_ID, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
谁能解释一下 PendingIntent.FLAG_UPDATE_CURRENT 和 PendingIntent.FLAG_IMMUTABLE 之间的区别。
如果我每次用户启动应用程序时都调用此方法,可以吗?它会创建或更新现有警报吗?
谢谢