【发布时间】:2010-12-16 14:34:47
【问题描述】:
我正在尝试将广播从服务发送到活动。我可以验证广播是从服务内部发送的,但是 Activity 没有接收到任何东西。
这里是相关的服务代码:
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"
【问题讨论】:
-
如何注册接收器?
-
在哪里以及如何在活动中声明 IntentFilter?
-
IntentFilter 不应该在这里参与活动,接收者在这里工作。
-
噢,总是用 registerReceiver(aReceiver, aIntentFilter) 注册我的接收器;是坏方法吗?
-
@Vladimir @Franco 我正在使用 registerReceiver(messageReceiver, new IntentFilter(IMService.NEW_MESSAGE)); 注册接收器;