Wie zum senden von Daten von BroadcastReceiver, um ein Fragment in android

Ich versuche, eine Chat-app.Ich habe eine SlidingDrawer Aktivität und es hat viele Fragmente und unter die ChatFragment ist.Nun, wenn ich mich auf Nachricht senden, um mein Freund , ich habe eine Chatting Window und wenn eine Nachricht kommt aus GCM service, und ich bin in ChatFragment dann diese Nachricht wird an das Fragment und Aktualisierung der listview, wie ich will update das chatWindow, wenn keine Nachricht kommt, während im Chat Nun versuchte ich, zu tun, wie unten gezeigt.

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

Hier bin ich ab einem broadcastreceiver in 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);


    }
}

Dies ist mein ChatBroadCastReceiver Klasse und wenn keine Meldung kommt, ist es erfolgreich, erhält bei der onReceive() Methode.Jetzt will ich senden diese Nachricht, um dem Fragment.Was ich versucht habe , registrierte ich das Fragment mit und versucht, die gleichen Daten bei der onReceive() von ChatFragment.Es hat aber nicht nennen.Ich habe versucht zu sehen, nach Anmeldung.

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

    }

Nun, wie kann ich die Nachricht bekommen, die ich in der Broadcastreceiver, um die onReceive() der ChatFragment??

  • Was ist eine Verwendung von LocalBroadcastManager.getInstance()?
  • Ich habe dieses Zitat von einer Antwort." wenn Sie Ihre Broadcast Receiver ist in einem fragment registrieren mit LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice); und Registrierung es mit LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);".Aber ich habe versucht zu tun, ohne LocalBroadCastManager aber dasselbe Ergebnis.
  • wenn u wissen, Sie können mir empfehlen. @ Dhaval patel
  • Okay, ich habe einige der Forschung auf LocalBroadcastManager und gefunden dieser sehr hilfreich. Möglicherweise Werden Nicht auf Ihre Frage.
  • LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater")); versuchen Sie diese ein.
  • Ich möchte Euch um einen Kommentar mReceiver = new ChatBroadCastReceiver(); Linie und versuchen LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver ,new IntentFilter("chatupdater"));
  • kann u erklären Sie mir, warum es auf diese Weise gearbeitet haben..

Schreibe einen Kommentar