簡體   English   中英

無法取消Android Alarm Manager的警報

[英]Can't cancel alarms for Android Alarm Manager

我正在嘗試使用我的應用程序設置多個警報,並根據請求取消它們。

我已經閱讀了很多關於相同的主題,並瀏覽了文檔,但似乎它不起作用。

文檔說,取消將嘗試找到一個與我提供的' filterEquals '匹配的意圖('確定兩個意圖是否相同,以達到意圖解析(過濾)的目的。也就是說,如果他們的行為,數據,類型, class和類別是相同的。這不會比較意圖中包含的任何額外數據。')

我提供相同的操作,數據,類型,類和類別,為什么它不起作用?

創建警報:

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    int interval = 30000;

    Intent intent = new Intent(getApplicationContext(), Broadcast.class);        
    intent.putExtra("alarmTime",alarmTime);
    intent.putExtra("reminder1",reminder1);
    intent.putExtra("reminder2",reminder2);
    intent.putExtra("title",title);
    intent.putExtra("message",message);
    intent.putExtra("vibrate",vibrate);
    intent.putExtra("sound",sound);
    intent.putExtra("name",name);

    //Create _id from data input. is unique
    int _id = 0;
    for (char i: name.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:title.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:message.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    _id += (int) alarmTime.getTime();
    _id += (int) reminder1.getTime();
    _id += (int) reminder2.getTime();
    Log.e("ALARMS", "Creating alarm with id: "+_id);
    intent.setData(Uri.parse("custom://" + _id));
    intent.setAction(String.valueOf(_id));
    PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);

    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, pendingUpdateIntent);

取消鬧鍾

AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(getApplicationContext(), Broadcast.class);
    intent.putExtra("alarmTime",alarmTime);
    intent.putExtra("reminder1",reminder1);
    intent.putExtra("reminder2",reminder2);
    intent.putExtra("title",title);
    intent.putExtra("message",message);
    intent.putExtra("vibrate",vibrate);
    intent.putExtra("sound",sound);
    intent.putExtra("name",name);

    int _id = 0;
    for (char i:name.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:title.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:message.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    _id += (int) alarmTime.getTime();
    _id += (int) reminder1.getTime();
    _id += (int) reminder2.getTime();
    intent.setData(Uri.parse("custom://" + _id));
    intent.setAction(String.valueOf(_id));
    PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);
    Log.e("ALARMS", "Cancelling alarm with id: "+_id);
    // Cancel alarms
    try {
        manager.cancel(pendingUpdateIntent);
    } catch (Exception e) {
        Log.e("ALARMS", "AlarmManager update was not canceled. " + e.toString());
    }

所以我用不同的參數調用3次創建警報,所以我的_id每次都不同。

然后我撥打3次取消警報,並在創建和取消時為每個警報生成匹配的ID。

所以取消運行但我的警報仍然被解雇。

我的警報觸發廣播接收器,每個警報輸出一個通知。

我忘了提到我嘗試使用PendingIntent的不同標志但沒有工作(FLAG_CANCEL_CURRENT,FLAG_UPDATE_CURRENT)

好像我正在為警報提供不同的日期,並且_id是不同的幾個數字(開始和結束是相同的),這導致調用取消_id值不同而且不起作用。

更改了我生成_id的方式以排除日期(我使用新的Date()生成的日期)而不是它的工作原理

糟透了,我沒有看到它。

暫無
暫無

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

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