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..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Registrieren Ihre Ausstrahlung, die Sie verwenden:
So erhalten Sie Nur Broadcast auf
ChatBroadCastReceiver
Klasse. Da mReceiver ist eine Instanz vonChatBroadCastReceiver
Klasse.Nun zum Empfangen von broadcast-Meldung auf anonyme Klasse, die Sie erstellt haben, in Ihre
ChatFragment
Sie brauchen, um zu registrieren, dass, wie unter code. Wo mReceiver wird eine Instanz der anonymen BroadcastReceiver-Klasse, die Sie implementiert haben, in IhrerChatFragment
Klasse.Erhalten Broadcast-Nachricht Sowohl auf ChatFragment und ChatBroadCastReceiver müssen Sie sich registrieren broadcast receiver zweimal.
Hoffe, diese Antwort wird Ihnen helfen, zu verstehen, Ihr problem.
Versuchen, diese
Erstellen Sie eine Schnittstelle, die eine Methode wie diese.
public interface DemoListener {
public void receiveMessage(String message);
}
Implementieren Sie nun diese in Ihr fragment und registrieren des Listeners in
BroadcastReceiver
, sobald Ihre Sendung Empfänger erhält jede Nachricht wird es verfügbar sein auf Ihrer fragment über diesen Listener.Hoffe, das hilft.