![](/img/trans.png)
[英]How to send data from BroadcastReceiver to an Activity in android?
[英]How to send data from BroadcastReceiver to Fragment in android
我正在嘗試制作一個聊天應用程序。我有一個SlidingDrawer
活動,它有很多片段,其中ChatFragment
是其中ChatFragment
現在當我向朋友發送消息時,我有一個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()中啟動廣播接收器。
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()
,但是沒有ChatFragment
。我試圖通過登錄查看。
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()?
嘗試這個
創建一個具有這樣方法的接口。
public interface DemoListener { public void receiveMessage(String message); }
現在,在您的片段中實現此功能,並在BroadcastReceiver
注冊偵聽器,現在您的廣播接收器收到任何消息后,便可以通過此Listener將其用於您的片段。
希望這可以幫助。
注冊廣播您正在使用:
mReceiver = new ChatBroadCastReceiver();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater"));
因此,您將僅在ChatBroadCastReceiver
類上接收廣播。 因為mReceiver是ChatBroadCastReceiver
類的實例。
現在,要在您的ChatFragment
創建的匿名類上接收廣播消息,您需要像下面的代碼一樣進行注冊。 其中mReceiver是您在ChatFragment
類中實現的匿名BroadcastReceiver類的實例。
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater"))
要在ChatFragment和ChatBroadCastReceiver上接收廣播消息,您需要兩次注冊廣播接收器。
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater"))
ChatBroadCastReceiver mChatBroadCastReceiver = new ChatBroadCastReceiver();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mChatBroadCastReceiver ,new IntentFilter("chatupdater"))
希望這個答案能幫助您理解您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.