BroadcastReceiver повторяется без изменений - PullRequest
0 голосов
/ 11 июня 2018

Я вызываю BroadcastReceiver из действия

Intent alarmIntent = new Intent(MainActivity.this, AlarmRec.class);
            alarmIntent.putExtra("lol",0);
            pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0);
            AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            manager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);

Его метод onReceivemethod таков:

        int lol=intent.getExtras().getInt("lol");
    Toast.makeText(context, "I'm running "+lol, Toast.LENGTH_SHORT).show();
    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    lol++;
    Intent alarmIntent = new Intent(context, AlarmRec.class);
    alarmIntent.putExtra("lol",lol);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
    manager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);

По сути, каждый раз, когда вызывается приемник, он должен показывать тост, который работает плюсувеличенное значение (1,2,3 и т. д.).Тем не менее, это всегда показывает, что он работает 0. Что я делаю не так?

1 Ответ

0 голосов
/ 04 июля 2018

Потому что lol не увеличивается!

Ваша концепция совершенно неверна ~

int lol и String lol - разные объекты.Вы должны передать один и тот же объект в обеих областях, как показано ниже.

Класс 1: (Деятельность)

....
AlarmManager manager =...
....
manager.setRepeating(.....); //use to repeat + don't need to pass lol

Класс 2: (Получатель)

.... 
public static int LOL = 0;
....
onReceive(....){
LOL++;
Toast.makeText(....,(String)LOL,....).show();
}

В противном случае

Увеличьте lol в классе 1, затем отправьте значение в Class 2.Просто внедрите toast в Class 2.

Как:

int lol =0
for(;;) {   //a forever loop which runs until your device die
sendToClass2(lol++);
}

private void sendToClass2(int foe){
....
alarmIntent.putExtra("lol",foe);
....
manager.setExact(...); // If you really love to use seExact use this
}

Кроме того, почему вы пытаетесь запустить 2-й класс из кода, который существует сам по себе?Не плохая и сложная идея, даже не работает, как подсказывает ваш вопрос.

...