2

次のような OnBootReceiver で作成されたアラームがあります。

public class OnBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 10);

            Intent i = new Intent(context, AlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);

            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), savedIntervalAutomaticMilisInt, pendingIntent);
    }
}

しかし、それをキャンセルするには、Activity で次のコードを使用します。

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
scManager.clearErrors();

したがって、設定するには BroadcastReceiver の Context パラメータのコンテキストを使用しますが、キャンセルするにthisは Activity のコンテキストを使用します。私の質問: コンテキストが少し異なりますが、アラームはキャンセルされますか?

4

2 に答える 2

7

コンテキストが少し異なりますが、アラームはキャンセルされますか?

この場合、コンテキストは問題ではありませんAlarmManager

PendingIntent.FLAG_CANCEL_CURRENTアラームのキャンセル ロジックで を選択すると、問題が発生する可能性があります。問題が発生した場合 (例:adb shell dumpsys alarmキャンセルしてもアラームが機能しなかったことを示している)、 に置き換えPendingIntent.FLAG_CANCEL_CURRENTてみてください0

于 2013-05-02T14:28:53.313 に答える
1

グローバル (アプリケーション全体) のコンテキスト オブジェクトでこれを試してください: android.content.ContextWrapper.getApplicationContext()

于 2013-05-02T14:19:20.027 に答える