Я пытаюсь сделать чат-приложение. У меня есть SlidingDrawer
Активность, и у него много фрагментов, среди которых ChatFragment
is one.Now, когда я отправляю сообщение своему другу, я имеют Chatting Window
, и если какое-либо сообщение поступает из GCM
службы, и я в ChatFragment
, то это сообщение перейдет к этому фрагменту и обновит список, поскольку я хочу обновить chatWindow, когда какое-либо сообщение появляется во время беседы. Теперь я попытался сделать, как показано ниже.
GcmIntentService:Как отправить данные из BroadcastReceiver в Fragment в android
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
. Но он не вызывал. Я пытался увидеть, выполнив регистрацию.
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 к OnReceive() из ChatFragment ??
Что такое LocalBroadcastManager.getInstance()? –
Я получил эту цитату из одного ответа. «Если ваш широковещательный приемник находится в фрагменте, зарегистрируйте его с помощью LocalBroadcastManager.getInstance (getActivity()). RegisterReceiver (onNotice) и отмените регистрацию с помощью LocalBroadcastManager.getInstance (getActivity()). UnregisterReceiver (onNotice) ". Но я попытался обойтись без LocalBroadCastManager, но тот же результат. –
, если вы знаете любой другой способ, который вы можете мне предложить. @ Dhaval patel –