代码之家  ›  专栏  ›  技术社区  ›  Orcha

广播接收机无变化重复

  •  1
  • Orcha  · 技术社区  · 8 年前

    我从一个活动中呼叫广播接收器

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

    基本上,每次调用接收器时,它应该显示一个正在运行的Toast加上一个递增的值(1、2、3等)。但是,它总是显示它正在运行0。我做错什么了?

    1 回复  |  直到 8 年前
        1
  •  1
  •   exploitr    8 年前

    因为 lol 不会增加!

    你的想法完全错了~

    int lol String lol 是不同的对象。您必须在下面的两个区域中传递相同的对象。

    一级:(活动)

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

    二级:(接收人)

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

    否则

    增量 大声笑 在类1中,然后将值发送到 Class 2 .只需在第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
    }
    

    除此之外,为什么要从代码本身中启动第二个类?这不是一个坏的和复杂的想法,即使没有按照你的问题建议工作。