如何从广播接收器发送数据片段的android(How to send data from Broad

2019-10-23 00:20发布

我试图做一个聊天app.I有SlidingDrawer活动,它有很多碎片,其中ChatFragment是one.Now当我发短信给我的朋友,我有一个Chatting Window ,如果任何消息来自GCM服务我在ChatFragment则此消息会去那个片段,当我想更新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);
    }

在这里我开始一个BroadcastReceiver在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() method.Now我想这个消息发送给我试过Fragment.What,我注册的片段与它试图让在同一数据onReceive()ChatFragment 。但它并没有call.I试图通过记录看。

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");

    }

现在,我怎样才能得到我在ChatFragment的广播接收器到的onReceive()得到的消息?

Answer 1:

注册您的广播正在使用:

mReceiver = new ChatBroadCastReceiver();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater"));

所以,你将只能收到广播ChatBroadCastReceiver类。 由于mReceiver是一个实例ChatBroadCastReceiver类。

现在对你已经在你创建匿名类接收广播消息ChatFragment您需要注册,像下面的代码。 其中mReceiver是您在已实施的匿名广播接收器类的实例ChatFragment类。

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"))

希望这回答将帮助你了解你的问题。



Answer 2:

尝试这个

  • 创建一个将有一个这样的方法的接口。

    public interface DemoListener { public void receiveMessage(String message); }

现在,在您的片段实现这一点,并在注册该侦听BroadcastReceiver ,现在只要你的广播接收器通过这个监听器接收这将是可用的任何消息,你的片段。
希望这可以帮助。



文章来源: How to send data from BroadcastReceiver to Fragment in android