1

Я создал операцию, которая обновляется во время уведомления, но перед вами стоит одна проблема, которая заключается в том, что при поступлении уведомления он продолжает отправлять бесконечные уведомления. Раньше он работал нормально, но я сделал некоторые изменения, и это было сделано. Пожалуйста, помогите мне. Я присоединяю к нему свой код.Получение уведомления бесконечно от GCM Intent Service в 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); 
} 

Этот код заканчивается для класса намерений.

Теперь код моей деятельности

  @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 амортизируется вы можете использовать ТСМ для уведомления. – Google

+0

@Google Нет, мне нужно использовать GCM, потому что он находится на конечном уровне. –

+0

Какова ценность 'notify_no'? Не удается найти его в методе sendNotification. –

ответ

1

Хорошо. Итак, что происходит с вашим кодом, так это то, что вы отправляете широковещательную передачу в свой приемник, а также заставляете 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 метод деятельности, пожалуйста, измените TAG в myMessage:

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

Это работает только для первого уведомления после того, как это уведомление поступило для всех, но трансляция этого действия работает только в первый раз –