从服务到活动的Android广播

时间:2010-12-16 14:34:47

标签: android broadcastreceiver

我正在尝试从服务发送广播到活动。我可以验证广播是从服务中发送的,但是活动没有收到任何内容。

以下是相关的服务代码:

   Intent i = new Intent(NEW_MESSAGE);  
   i.putExtra(FriendInfo.USERNAME, StringUtils.parseBareAddress(message.getFrom()));
   i.putExtra(FriendInfo.MESSAGE, message.getBody());
   i.putExtra("who", "1");
   sendBroadcast(i);

活动类中的接收端:

public class newMessage extends BroadcastReceiver 
{
@Override
   public void onReceive(Context context, Intent intent) 
   {    
    String action = intent.getAction();
       if(action.equalsIgnoreCase(IMService.NEW_MESSAGE)){    
          Bundle extra = intent.getExtras();
          String username = extra.getString(FriendInfo.USERNAME);   
          String message = extra.getString(FriendInfo.MESSAGE);
          String who = extra.getString("who");
         }
   }
}

BroadcastReceiver在Activity中定义。我在Activity的onCreate方法中注册接收器,而不是在Manifest文件中注册。

我很难过为什么不会记录。任何东西。

有什么见解?

修改
注册如下:

 registerReceiver(messageReceiver, new IntentFilter(IMService.NEW_MESSAGE));

“messageReceiver”定义为

private newMessage messageReceiver = new newMessage();

IMService.NEW_MESSAGE只是一个字符串=“NewMessage”

3 个答案:

答案 0 :(得分:10)

我不确定它是否特定于设置,或者它是否一般是修复,而是将register/unregister移至onResume/onPause _respectively_而未注册onCreate解决了我的问题。

答案 1 :(得分:1)

尝试这两件事:

  1. 使用清单文件注册接收者(但几乎没有帮助)
  2. 尝试让您的接收器成为常规课程,而不是内部课程。

答案 2 :(得分:0)

内部类广播接收器将无法处理广播(意味着它无法定位该类)。 所以把它作为一个单独的类

肯定会起作用。