- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个聊天应用程序。我有一个 SlidingDrawer
Activity ,它有很多 fragment ,其中 ChatFragment
是一个。现在当我发送消息到我的 friend ,我有一个 Chatting Window
,如果任何消息来自 GCM
服务并且我在 ChatFragment
中,那么这条消息将转到该 fragment 并更新 ListView ,因为我想在聊天时收到任何消息时更新 chatWindow 现在我尝试像下面那样做。
GcmIntentService:
public class GcmIntentService extends IntentService {
public GcmIntentService() {
super("GcmIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
// The getMessageType() intent parameter must be the intent you received
// in your BroadcastReceiver.
String messageType = gcm.getMessageType(intent);
if (extras != null && !extras.isEmpty()) { // has effect of unparcelling Bundle
// Since we're not using two way messaging, this is all we really to check for
if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
Logger.getLogger("GCM_RECEIVED").log(Level.INFO, extras.toString());
showToast(extras.getString("message"));
Intent sendData = new Intent("chatupdater");
sendData.putExtra("msg", extras.getString("message"));
LocalBroadcastManager.getInstance(this).sendBroadcast(sendData);
Log.i("chat","i am in GCMIntentService");
}
}
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
这里我在 onHandleIntent() 中启动一个 broadcastreceiver。
ChatBroadCastReceiver:
public class ChatBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("chat","I am in ChatBroadCastReceiver");
String msg = intent.getStringExtra("msg");
Log.i("chat",msg);
//Intent data = new Intent("chatupdater");
//Intent data = new Intent("chatupdater");
//data.putExtra("key","data");
//data.putInt("fragmentno",1); // Pass the unique id of fragment we talked abt earlier
//context.sendBroadcast(intent);
}
}
这是我的 ChatBroadCastReceiver
类,如果有任何消息到达,它会在 onReceive()
方法中成功接收。现在我想将此消息发送到 Fragment。我要做什么试过了,我用它注册了 fragment ,并试图在 ChatFragment
的 onReceive()
获取相同的数据。但它没有调用。我试图通过日志记录来查看.
public class ChatFragment extends Fragment {
//ChatBroadCastReceiver mReceiver;
private EditText et_chat;
Bundle mailData;
String caller_mail;
private ListView chatListview;
private ChatWindowAdapter chatWindowAdapter;
private List<ChatSession>PreviousChatSession;
private List<ChatInfo> chatListItems;
Button chat_send;
public ChatFragment() {
}
public BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("chat","I am in BroadCastReceiver");
String msg = intent.getStringExtra("msg");
Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReceiver = new ChatBroadCastReceiver();
//getActivity().registerReceiver(new ChatBroadCastReceiver(),new IntentFilter("chatupdater"));
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(new ChatBroadCastReceiver(),new IntentFilter("chatupdater"));
Log.i("chat", "I am in onCreate");
}
现在如何将我在 Broadcastreceiver 中收到的消息发送到 ChatFragment 的 onReceive()?
最佳答案
试试这个
创建一个接口(interface),该接口(interface)将具有这样的方法。
公共(public)接口(interface) DemoListener {
public void receiveMessage(字符串消息);
}
现在在您的 fragment 中实现它并在 BroadcastReceiver
中注册监听器,现在只要您的广播接收器收到任何消息,您的 fragment 就可以通过此监听器使用它。
希望这个有帮助。
关于android - 如何将数据从 BroadcastReceiver 发送到 android 中的 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059380/
我是一名优秀的程序员,十分优秀!