gpt4 book ai didi

android - 如何将数据从 BroadcastReceiver 发送到 android 中的 Fragment

转载 作者:行者123 更新时间:2023-11-29 15:12:08 25 4
gpt4 key购买 nike

我正在尝试制作一个聊天应用程序。我有一个 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 ,并试图在 ChatFragmentonReceive() 获取相同的数据。但它没有调用。我试图通过日志记录来查看.

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com