一个服务中的BroadcastReceiver没有接收广播Android

时间:2012-03-09 17:08:43

标签: android broadcastreceiver android-service

我有这个应用程序,其中用户更新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管理器安装了它。我有什么不对的吗?

2 个答案:

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