我从活动中呼叫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 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();
}
除此以外
在类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/