簡體   English   中英

Android 12 上的 PendingIntent.FLAG_UPDATE_CURRENT 錯誤

[英]PendingIntent.FLAG_UPDATE_CURRENT error on Android 12

在我的應用程序中,我計划在每天的特定時間設置鬧鍾。 為此,我正在使用警報管理器(請參見下面的代碼),這在 12 以下的 android 設備上運行良好,但在 12 及以上的設備上運行良好

Firebase 上的錯誤

定位 S+(版本 31 及更高版本)要求在創建 PendingIntent 時指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。 強烈考慮使用 FLAG_IMMUTABLE,僅當某些功能依賴於 PendingIntent 可變時才使用 FLAG_MUTABLE

Google Crashlytic 錯誤

這是我的代碼

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 之間的區別。

如果我在每次用戶啟動應用程序時調用此方法,可以嗎? 它會創建或更新現有警報嗎?

謝謝

必須在 Android 12 或更高版本中使用PendingIntent.FLAG_MUTABLEPendingIntent.FLAG_IMMUTABLE

點擊了解更多信息

PendingIntent pendingIntent= PendingIntent.getBroadcast(mCon, ALARM1_ID, myIntent, PendingIntentFLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);

如果仍然崩潰或無法使用您的代碼,請使用此依賴項,我認為它對您有用。 build.gradle (:app) 文件中添加此代碼。

implementation 'androidx.work:work-runtime:2.7.1'
// required to avoid crash on Android 12 API 31
implementation 'androidx.work:work-runtime-ktx:2.7.1'

Android12開始,我們需要為每次使用掛起的 Intent 設置可變性

如果我們認為我們的應用程序的最低支持版本是 23,那么我們可以為待處理的意圖對象設置不可變或可變標志。

檢查中型博客第 4 步中提到的此解決方案。

解決方案圖片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM