我从活动中呼叫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);


它的onReceive方法是这样的:

        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);


轻松地,每次调用Receiver时,都应该显示Toast It's Running,加上一个递增的值(1,2,3等)。但是,它始终显示“正在运行0”。我在做什么错?

最佳答案

因为lol不会递增!

你的概念是完全错误的〜

int lolString 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();
}


除此以外

在类1中递增lol,然后将值发送到Class 2。只需在第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
}


除此之外,为什么要尝试从代码中启动第二类本身呢?这不是一个坏而复杂的主意,即使您的问题所建议的也不起作用。

关于android - BroadcastReceiver重复执行而没有任何更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50801698/

10-12 01:17