android - setexactandallowwhileidle - setexact setrepeating




AlarmManager.setRepeating에 대한 여러 호출에서 동일한 Intent/PendingIntent 추가 값을 제공하지만 다른 값을 제공했습니다. (2)

이 질문을 쓰는 동안 해결되었지만 누군가에게 도움이 될 경우 게시 :

id 값이 서로 다른 여러 개의 알람을 설정하고 있습니다.

AlarmManager alarms = (AlarmManager)context.getSystemService(
        Context.ALARM_SERVICE);
Intent i = new Intent(MyReceiver.ACTION_ALARM);  // "com.example.ALARM"
i.putExtra(MyReceiver.EXTRA_ID, id);  // "com.example.ID", 2
PendingIntent p = PendingIntent.getBroadcast(context, 0, i, 0);
alarms.setRepeating(AlarmManager.RTC_WAKEUP, nextMillis, 300000, p);  // 5 mins

... 그리고 이것들을 받기 :

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_ALARM)) {
        // It's time to sound/show an alarm
        final long id = intent.getLongExtra(EXTRA_ID, -1);

알람은 적절한 시간에 수신자에게 전달되지만 EXTRA_ID 가 잘못된 값으로 설정된 경우가 종종 있습니다. 특정 시점에 전달하고자했던 값이 아니라 내가 사용한 값입니다.


문제의 해결책은 Intent.FLAG_ACTIVITY_NEW_TASK를 사용하는 것입니다.

  p = PendingIntent.getBroadcast(context, 0, i, Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent.FLAG_UPDATE_CURRENT 플래그를 사용할 수도 있습니다.

PendingIntent p = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

이것도 일해야한다.





alarms