0

宣言していない場合はAlarmManagerが完全に機能しますが、宣言した場合は起動cancelしませんcancel。コードは次のとおりです。

Calendar c= Calendar.getInstance();
                c.set(Calendar.HOUR_OF_DAY, 0); 
                c.set(Calendar.MINUTE, 37);
                c.set(Calendar.SECOND, 0);

            Toast.makeText(this, c.getTime().toString(), Toast.LENGTH_LONG).show();
        intent = new Intent(TestAlarm.this, TestAlarmService.class);
        pi = PendingIntent.getService(TestAlarm.this, 1, intent, 0);
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);

およびcancelコード:

 c.add(Calendar.HOUR_OF_DAY, 0);
        c.add(Calendar.MINUTE, 38);
        c.add(Calendar.SECOND, 0);
        PendingIntent pi1=PendingIntent.getService(TestAlarm.this, 1, intent, 0);
        AlarmManager am1 = (AlarmManager) getSystemService(ALARM_SERVICE);
        //stopService(intent);
        am1.cancel(pi);

ここAlarmManagerで、12:37に出発し、 cancel1〜2分後に出発したいと思います...しかし、cancelコードを使用するときはいつでも、AlarmManager決して発火しません...よろしくお願いします!:)

4

1 に答える 1

0

am1.cancel(pi);行を次のように変更しam1.cancel(pi1);ます - オリジナルをキャンセルしていますPendingIntent

また、キャンセル コードでは、(次の日付/時刻を明示的に設定するc.add()) の代わりに (現在の日付/時刻に加算する) を呼び出しています。c.set()を呼び出すとc.add(Calendar.MINUTE, 38)、現在のカレンダーに時間を 12:38 に設定するのではなく、実際には 38 分追加されます。

于 2012-04-26T02:58:10.627 に答える