Повторяющаяся тревога BroadcastReceiver Дополнительные строки намерений не обновляются - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть класс ниже, чтобы проверить, срабатывают ли мои тревоги в точное время, которое я запланировал, или оно отличается.

Я буду вызывать метод SetAlarm внутри BroadCast Reciever из MainActivity.Последовательные тревоги будут устанавливаться самим получателем, устанавливая текущее время в качестве новой строки.

Аварийные сигналы работают нормально, за исключением проблемы, которые не обновляются.ScheduledTime всегда будет содержать начальное значение независимо от того, что я установил в методе setAlarm.

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Date currentTime = new Date(); 
        String ScheduledTime = ""; 
        if (null != intent) { //Null Checking
            ScheduledTime =   intent.getStringExtra("ScheduledTime");
            //intent.removeExtra("ScheduledTime");
        }
        String message  = "Current Time" + currentTime + ",  Scheduled Time was: " + ScheduledTime ; 
        //Show Notification 

        long alarmMillis =(10*60*1000) ; //Set Alarm after 10 minutes
        Long newTimeInMillis = System.currentTimeMillis() +  alarmMillis;
        currentTime.setTime(newTimeInMillis );
        setAlarm(context, newTimeInMillis , currentTime.toString());
    }

     public void setAlarm(Context context, Long timeMillis, String ScheduledTime)
    {
        AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, AlarmReceiver.class);
        i.putExtra("ScheduledTime", ScheduledTime);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        am.setExact(AlarmManager.RTC_WAKEUP, timeMillis, pi);
    }
}

1 Ответ

0 голосов
/ 16 сентября 2018

С Официальный сайт Android

public static final int FLAG_UPDATE_CURRENT

Флаг, указывающий, что если описанный PendingIntent уже существует, затем сохранить его, но заменить его дополнительные данные с тем, что в этом новом Намерение. Для использования с getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int) и getService (Context, int, Intent, int).

Это можно использовать, если вы создаете намерения, где только дополнительные изменить, и не волнует, что любые лица, которые получили ваш предыдущий PendingIntent сможет запустить его с вашими новыми дополнениями, даже если они явно не даны ему.

Так что измени свой код с

PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);

до

PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...