2

以下のコードでワンショットアラームを作成およびキャンセルします。アラームが解除されず、一定時間内に発火する場合があります。文字列timerTypeは常に同じです。

アラームが常にキャンセルされない理由を誰か説明できますか?

ありがとうございました。フランソワ

public static final void startOneShotAlarm(Context context, int minutes, String timerType) {

    long period = 1000*60*minutes;
    long firstTime = SystemClock.elapsedRealtime() + period;

    Intent intent = new Intent(context, RepeaterDone.class);
    intent.setData(Uri.parse(timerType));
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,  PendingIntent.FLAG_ONE_SHOT);

    Log.d("BAN", "RepeaterStart, >" + Uri.parse(timerType) + "< ctx="+context.toString() + "i=" + intent.toString());

    // Schedule the alarm!
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, pendingIntent);
}

private static final void stopOneShotAlarm(Context context, String timerType) {
    // Create the same intent, and thus a matching IntentSender, for the one that was scheduled.
    Intent intent = new Intent(context, RepeaterDone.class);
    intent.setData(Uri.parse(timerType));
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,        PendingIntent.FLAG_ONE_SHOT);
    Log.d("BAN", "stop, >" + Uri.parse(timerType) + "< ctx="+context.toString() + "i=" + intent.toString());            

    // And cancel the alarm.
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
}
4

0 に答える 0