【问题标题】:Passing parameters to the BroadcastReceiver将参数传递给广播接收器
【发布时间】:2013-01-17 15:51:55
【问题描述】:

我正在尝试将一个 int 值从我的 Service 传递给 CallReceiver 类,不幸的是 CallReceiver.value 始终等于 0,即使在设置了另一个值之后也是如此。当我试图将它作为参数传递给构造函数时,情况完全相同,因此使用从服务调用的 setter 方法。真的没有办法传递任何数据吗?

服务:

SharedPreferences settings = getSharedPreferences("SETTINGS", 0);
    int value = settings.getInt("value1", 0); // here the correct value is present, not 0.
    CallReceiver mCallReceiver = new CallReceiver();
    CallReceiver.value = value;  

接收者:

public class CallReceiver extends BroadcastReceiver  {

public int value;

public CallReceiver(int value)  {
    this.value = value;
}

public CallReceiver()   {

}


@Override
public void onReceive(Context context, Intent intent) {


            Log.v("value", String.valueOf(value)); // here "value" = 0.


        }

     }

【问题讨论】:

  • CallReceiver 中的 value 字段不是静态的,您的意思是 mCallReceiver.value = value; 而不是 CallReceiver.value = value; 吗?

标签: android variables broadcastreceiver


【解决方案1】:

您的CallReceiver mCallReceiver=new CallReceiver(); 实例不用于接收意图。相反,Android 每次都会创建新实例。而 0 是未初始化整数变量的默认值。

为确保发生这种情况,请为您的 value 字段分配一些默认值:

public class RReceiver extends BroadcastReceiver {
    public int value=5;
    //...
}

你的值将永远等于 5。

至于将数据传递给BroadcastReceiver,将其作为额外添加到您正在广播的Intent

//in your service
Intent broadcastedIntent=new Intent(this, CallReceiver.class);
broadcastedIntent.putExtra("VALUE", 100500);
sendBroadcast(broadcastedIntent);

然后,在你的CallReceiver

@Override
public void onReceive(Context context, Intent intent) {
    int value=intent.getIntExtra("VALUE", 0);
}

【讨论】:

  • CallReceiver 甚至不是这里有问题的课程。他要修改的值在RReceiver
  • 那么,有没有办法发送任何值?
  • @soulreaver 您应该将此值作为附加值添加到您从服务中广播的Intent
  • @deville 我的 CallReceiver 不是 Activity,我无法将意图传递给它。
  • @在您的服务中的某处,您调用sendBroadcast(Intent)。这就是我所说的意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
相关资源
最近更新 更多