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 lolString 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中增加lol1,然后将值发送到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?这不是一个糟糕而复杂的想法,甚至不能像您的问题所建议的那样工作。