我有这个应用程序,其中用户更新Activity中的某些变量,并且此Activity使用BroadcastReceiver将新变量传递给IntentService。但是,IntentService中的BroadcastReceiver似乎没有接收广播。这是服务中用于创建广播接收器的代码
protected class UpdateReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Log.d("receiver", "Got message: ");
//state=3;
//Toast.makeText(context, "got it", Toast.LENGTH_SHORT).show();
}
};
这是在onHandle()函数中注册接收器的代码
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("updates");
UpdateReceiver lol = new UpdateReceiver();
DetectService.this.registerReceiver(lol, intentFilter);
最后,这是从活动
发送广播的代码Intent broadcastIntent = new Intent();
broadcastIntent.setAction("updates");
HomePageActivity.this.sendBroadcast(broadcastIntent);
Log.d("sender", "send msg");
当我将接收器放在与广播部分相同的活动中时,它可以工作,但是当我将它放入IntentService时。求救!
在另一个相关说明中,我尝试在此项目中使用LocalBroadcastManager,因为广播都是本地的,但eclipse似乎无法导入兼容性类。我已经使用Android SDK管理器安装了它。我有什么不对的吗?
答案 0 :(得分:4)
此Activity使用BroadcastReceiver将新变量传递给IntentService。
这没有任何意义。使用startService()
向IntentService
发送命令。 IntentService
不应该有BroadcastReceiver
,因为只要IntentService
完成就会销毁onHandleIntent()
,因此永远不会收到广播。
我已尝试在此项目中使用LocalBroadcastManager,因为广播都是本地的,但eclipse似乎无法导入兼容性类。
:: shrug ::
Here is a sample project包含使用LocalBroadcastManager
的Eclipse项目文件。在创建项目时,我没遇到任何特定的Eclipse问题。
答案 1 :(得分:2)
protected class UpdateReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Log.d("receiver", "Got message: ");
//state=3;
//Toast.makeText(context, "got it", Toast.LENGTH_SHORT).show();
}
};
在onCreate()方法中或相关的位置。
mReceiver = new UpdateReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("<your receivers intent goes here>");
this.registerReceiver(mReceiver, filter);
现在你应该可以发送一个广播并将其接收。
Intent intent = new Intent("<your receivers intent goes here>");
// Add what you want to add to the intent right here.
<context-handle>.sendBroadcast(intent);