问题
I have created a activity which got refreshes while a notification occurs but I am facing one problem which is that when a notification came it continues to send endless same notification. Earlier it was working fine but I made some changes and this had done. Please help me. I am attaching my code with it.
Code for GCM IntentService class
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
String msgg = intent.getStringExtra("message");
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
Bundle bundle = new Bundle();
if (!extras.isEmpty()) {
if (GoogleCloudMessaging.
MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
sendNotification(this, msgg);
} else if (GoogleCloudMessaging.
MESSAGE_TYPE_DELETED.equals(messageType)) {
sendNotification(this, msg);
updateMyActivity(this,msgg);
bundle.putString("result", msg);
receiver.send(STATUS_FINISHED, bundle);
} else if (GoogleCloudMessaging.
MESSAGE_TYPE_MESSAGE.equals(messageType)) {
updateMyActivity(this,msgg);
sendNotification(this, msg);
}
}
Send notification Code
private void sendNotification(Context context, String message) {
Intent resultIntent;
int icon = R.mipmap.ic_launcher;
long when = System.currentTimeMillis();
NotificationCompat.Builder nBuilder;
Uri alarmSound = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.BigPictureStyle notiStyle = new
NotificationCompat.BigPictureStyle();
notiStyle.setBigContentTitle("afewtaps");
notiStyle.setSummaryText(message);
nBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(icon)
.setContentTitle("afewtaps")
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
.setLights(Color.BLUE, 500, 500).setContentText(message)
.setAutoCancel(true).setTicker("Notification from afewtaps")
.setSound(alarmSound);
resultIntent = new Intent(context,
LoginActivity.class);
resultIntent.putExtra("message", message);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultPendingIntent = PendingIntent.getActivity(context,
notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Show the max number of notifications here
if (notify_no < 9) {
notify_no = notify_no + 1;
} else {
notify_no = 0;
}
nBuilder.setContentIntent(resultPendingIntent);
NotificationManager nNotifyMgr = (NotificationManager) context
.getSystemService(context.NOTIFICATION_SERVICE);
nNotifyMgr.notify(notify_no + 2, nBuilder.build());
}
Send message to broadcast
// This function will create an intent. This intent must take as parameter the "unique_name" that you registered your activity with
static void updateMyActivity(Context context, String message) {
Intent intent = new Intent("com.google.android.c2dm.intent.RECEIVE");
//put whatever data you want to send, if any
intent.putExtra("message", message);
//send broadcast
context.sendBroadcast(intent);
}
this ends code for intent class.
now code of my activity
@Override
public void onResume() {
super.onResume();
// connectToDatabase();
getActivity().registerReceiver(mMessageReceiver, new IntentFilter("com.google.android.c2dm.intent.RECEIVE"));
}
//Must unregister onPause()
@Override
public void onPause() {
super.onPause();
getActivity().unregisterReceiver(mMessageReceiver);
}
//This is the handler that will manager to process the broadcast intent
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
String message = intent.getStringExtra("message");
//do other stuff here
connectToDatabase();
}
};
回答1:
Okay. So what is happening with your code is that you are sending a broadcast to your Receiver as well forcing the onHandleIntent
to be invoked again, which in result calls the updateActivity method, which again broadcasts and loop continues endlessly.
In your updateMyActivity
method, please change this:
Intent intent = new Intent("com.google.android.c2dm.intent.RECEIVE");
to
Intent intent = new Intent("myMessage");
The culprit here is
com.google.android.c2dm.intent.RECEIVE
which calls the onHandleIntent when broadcasted.
Also, in your onResume
method of the activity, please change the TAG to myMessage
:
getActivity().registerReceiver(mMessageReceiver, new IntentFilter("myMessage"))
来源:https://stackoverflow.com/questions/41355335/getting-notification-endlessly-from-gcm-intent-service-in-android