我正在创建一个我收到XMPP数据包的应用程序。我的应用程序从前台开始,如果没有启动就开始粘贴服务,并开始在后台接收消息并通知它们。通知效果很好,点击后会显示数据。当我从服务中进行 sendBroadcast 调用时,问题就出现了(有时也会出现在某些手机中),以便我可以在Activity打开时异步更新Activity中的消息文本。
我的应用程序是使用Activity制作的,其中有两个片段(SherlockFragment)
所以我在一个片段中制作了一个私人广播接收器,我想要显示文本(更新的文本)。
代码写在下面
public class newMessage extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.v("ONMESSAGE", "broadcast");
String action = intent.getAction();
if(action.equalsIgnoreCase("NewMessage")){
Bundle extra = intent.getExtras();
String username = extra.getString("from");
String message = extra.getString("message");
showMessage(username, message);
Log.v("ONMESSAGE", "in broadcast is " + username);
}
}
}
然后我在Fragment类
中做出如下声明private newMessage messageReceiver = new newMessage();
在onCreateView中我写了下面一行
getActivity().registerReceiver(messageReceiver, new IntentFilter("NewMessage"));
我现在没有取消注册广播接收器,我也试过这样做。
当我在服务中收到消息时,我打电话给下面的代码。
Intent i = new Intent("NewMessage");
i.putExtra("message", message);
i.putExtra("from", from);
context.sendBroadcast(i);
我没有添加广告来表明原因我在课堂上写的时候不知道怎么做。
有时,它调用sendbroadcase,一切运行良好,但有时它不会调用,只是生成通知。