0

保留中のインテントに対してアラームが存在するかどうかを確認する方法について、stackoverflow に関する質問を読みました。

この方法でアラームが存在するかどうかを確認します。

boolean alarmUp = (PendingIntent.getBroadcast(context, 0, 
    new Intent("com.my.package.MY_UNIQUE_ACTION"), 
    PendingIntent.FLAG_NO_CREATE) != null);

アラームを設定し、アラームが存在することを確認してから、アラームをキャンセルします。アラームは実際にはキャンセルされますが、上記のステートメントを再度実行しても true が返されます。

ブロードキャスト レシーバーを静的にマニフェストに登録しました。

アラームを設定およびキャンセルする私の方法は次のとおりです。

    public static void cancelRecurringAlarm(Context context, String intentAction) {
    Logger.mlog(DEBUG_TAG, "cancelRecurringAlarm called with intent " + intentAction);
    Intent reminder = new Intent();
    reminder.setClass(context, <receiverClassName>);
    reminder.setAction(intentAction);
    PendingIntent recurringReminder = PendingIntent.getBroadcast(context, 0, reminder, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarms.cancel(recurringReminder);
}

public static void setRecurringAlarm(String intentAction, Context context, long timeInMs) {
    Logger.mlog(DEBUG_TAG, "setRecurringAlarm called with intent " + intentAction);

    Intent reminder = new Intent();
    reminder.setClass(context,  <receiverClassName>);
    reminder.setAction(intentAction);
    PendingIntent recurringReminder = PendingIntent.getBroadcast(context, 0, reminder, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC, timeInMs, AlarmManager.INTERVAL_DAY, recurringReminder);
}
4

1 に答える 1