1

我已经创建了一个活动,当通知发生时得到刷新,但我面临的一个问题是,当通知来了,它继续发送无尽的相同的通知。此前它工作正常,但我做了一些改变,这已经完成。请帮帮我。我附上了我的代码。从android中的GCM意图服务无休止地获取通知android

代码GCM IntentService类

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



     } 


} 

发送通知代码

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


} 

信息发送到广播

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

这会结束intent类的代码。

现在我的代码活动的

  @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(); 


    } 
}; 
+0

现在GCM折旧您可以使用FCM的通知。 – Google

+0

@Google不,我需要使用GCM,因为它处于结束水平。 –

+0

'notify_no'的值是什么?在sendNotification方法中找不到它。 –

回答

1

好。因此,您的代码发生了什么事情,您正在向Receiver发送广播,并强制onHandleIntent再次被调用,结果调用updateActivity方法,该方法再次广播并循环连续不断。

在你updateMyActivity方法,请更改此:

Intent intent = new Intent("com.google.android.c2dm.intent.RECEIVE"); 

Intent intent = new Intent("myMessage"); 

这里的罪魁祸首是

com.google.android.c2dm.intent.RECEIVE 

广播时调用onHandleIntent。

此外,在活动的onResume方法,请改变TAGmyMessage

getActivity().registerReceiver(mMessageReceiver, new IntentFilter("myMessage")) 
+0

此通知仅适用于第一次通知,但该通知仅适用于第一次通知 –