I want to update the UI
of a fragment
from service
.I am using GCM
for sending message.I have this class for GCM
:
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"));
sendBroadcast(sendData);
}
}
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
In the onHandleIntent()
method i broadcasted the message to a fragment which is registered to BroadCastReceiver
.I have one SlidingDrawerActivity
and it has many Fragments and ChatFragment
is one of them.I want to send this message from GCMIntentService
to ChatFragmen
t.
My ChatFragment class:
public class ChatFragment extends Fragment {
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() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().registerReceiver(new ChatBroadCastReceiver(),new IntentFilter("chatupdater"));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.chat_window, null, false);
et_chat = (EditText) v.findViewById(R.id.et_chat);
chat_send = (Button) v.findViewById(R.id.bt_chat_send);
chatListview = (ListView)v.findViewById(R.id.chat_listView);
chatListItems = new ArrayList<ChatInfo>();
chatWindowAdapter = new ChatWindowAdapter(getActivity(),chatListItems);
chatListview.setAdapter(chatWindowAdapter);
mailData=getArguments();
caller_mail = mailData.getString(PropertyNames.Userinfo_Mail.getProperty());
retrieveChats();
chat_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChatInfo chatInfo= new ChatInfo();
chatInfo.setChat_text(et_chat.getText().toString());
chatInfo.setDirection("right");
chatListItems.add(chatInfo);
chatWindowAdapter.notifyDataSetChanged();
fetchID(caller_mail);
}
});
return v;
}
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
}
};
My ChatBroadCastReceiver Class for chatFragment :
public class ChatBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
I am sending the message with intent in sendBroadcast(sendData)
and receiving it inside chatFragment
and in onReceive()
method i want to see the message in Toast.But Toast is not showing.
Did i implement BroadcastReceiver correctly for fragment inside service??
EDIT: I have debugged and saw that below portion is not calling
private final BroadcastReceiver receiver = 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();
}
};
Do I have to include anything in the menifest about the receiver??