BroadcastReceiver 重复无变化
BroadcastReceiver repeats without change
我从 Activity
调用 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 它是 运行 加上一个增量值(1、2、3 等)。但是,它总是显示 运行 0。我做错了什么?
因为 lol
没有递增!
你的观念完全错了~
int lol
和 String lol
是不同的对象。您必须在两个区域中传递相同的对象,如下所示。
Class 1 : (Activity)
....
AlarmManager manager =...
....
manager.setRepeating(.....); //use to repeat + don't need to pass lol
Class 2 : (接收器)
....
public static int LOL = 0;
....
onReceive(....){
LOL++;
Toast.makeText(....,(String)LOL,....).show();
}
否则
在Class中增加lol
1,然后将值发送到Class 2
。只需在 Class 2.
中实现 toast
赞:
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 个 class?这不是一个糟糕而复杂的想法,甚至不能像您的问题所建议的那样工作。
我从 Activity
调用 BroadcastReceiverIntent 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 它是 运行 加上一个增量值(1、2、3 等)。但是,它总是显示 运行 0。我做错了什么?
因为 lol
没有递增!
你的观念完全错了~
int lol
和 String lol
是不同的对象。您必须在两个区域中传递相同的对象,如下所示。
Class 1 : (Activity)
....
AlarmManager manager =...
....
manager.setRepeating(.....); //use to repeat + don't need to pass lol
Class 2 : (接收器)
....
public static int LOL = 0;
....
onReceive(....){
LOL++;
Toast.makeText(....,(String)LOL,....).show();
}
否则
在Class中增加lol
1,然后将值发送到Class 2
。只需在 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 个 class?这不是一个糟糕而复杂的想法,甚至不能像您的问题所建议的那样工作。