2016-10-23 3 views
0

Ich versuche Push-Benachrichtigungen mit Firebase Cloud Messaging zu stapeln und ich habe ein Problem, ich weiß nicht, wie man erkennt, dass die Push-Benachrichtigung gelöscht wurde (mit einem Sweep oder mit der Alle Schaltfläche löschen).Android-Clearing-Benachrichtigungen nicht erkannt

Ich habe fast jedes Tutorial versucht, das ich auf Stackoverflow ohne Erfolg gesehen habe, so dass ich etwas vermisse.

Das ist, was ich jetzt haben:

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

final static String GROUP_KEY_EMAILS = "group_key_emails"; 

protected PendingIntent getContentIntent(String data) 
{ 
    Intent notificationIntent = new Intent(getApplicationContext(), SplashScreen.class); 
    notificationIntent.putExtra("custom", data); 
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    return PendingIntent.getActivity(getApplicationContext(), 1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
} 

protected PendingIntent getDeleteIntent() 
{ 
    Intent intent = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class); 
    intent.setAction("notification_cancelled"); 
    return PendingIntent.getBroadcast(getApplicationContext(), 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
} 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 

    if(remoteMessage.getNotification() != null) 
    { 
     try { 
      Map<String, String> data = remoteMessage.getData(); 
      String customData = data.get("custom"); 
      JSONObject customJSON = new JSONObject(customData); 
      final JSONObject pushData = customJSON.getJSONObject("custom data"); 

      String message = remoteMessage.getNotification().getBody(); 
      Notification notif1 = new android.support.v4.app.NotificationCompat.Builder(getApplicationContext()) 
        .setContentTitle("My app") 
        .setContentText(message) 
        .setSmallIcon(R.drawable.icon) 
        .setAutoCancel(true) 
        .setGroup(GROUP_KEY_EMAILS) 
        .setContentIntent(getContentIntent(customData)) 
        .setDeleteIntent(getDeleteIntent()) 
        .build(); 

      NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); 
      notificationManager.notify(1, notif1); 
      AuxiliaryFunctions.addPushNotificationsMessage(getApplicationContext(), message); 
      int notifId = AuxiliaryFunctions.readPushNotificationsMessagesNum(getApplicationContext()); 
      if(notifId > 1) 
      { 
       NotificationCompat.InboxStyle style = new android.support.v4.app.NotificationCompat.InboxStyle() 
         .setSummaryText(notifId + " new messages"); 
       JSONArray messages = AuxiliaryFunctions.readPushNotificationsMessages(getApplicationContext()); 
       for(int i = 0; i < messages.length(); i++) 
       { 
        String localmessage = messages.getString(i); 
        style.addLine(localmessage); 
       } 
       Notification summaryNotification = new android.support.v4.app.NotificationCompat.Builder(getApplicationContext()) 
         .setContentTitle("My app "+notifId+" new messages") 
         .setSmallIcon(R.drawable.iconplus) 
         .setStyle(style) 
         .setGroup(GROUP_KEY_EMAILS) 
         .setGroupSummary(true) 
         .setAutoCancel(true) 
         .setContentIntent(getContentIntent("")) 
         .setDeleteIntent(getDeleteIntent()) 
         .build(); 

       notificationManager.notify(1, summaryNotification); 
      } 

     } catch (JSONException e) { 

     } 
    } 
    } 
} 

Das ist meine Mitteilung Broadcast-Receiver ist:

public class NotificationBroadcastReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
    Log.e("", "NotificationBroadcastReceiver:onReceive"); 
    } 
} 

Und schließlich erkläre ich dies in meinem Manifest:

 <receiver android:name="auxiliary.NotificationBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="notification_cancelled"/> 
     </intent-filter> 
    </receiver> 

Well , die Benachrichtigungen werden korrekt angezeigt, sie werden gestapelt, wenn mehr als eine Benachrichtigung vorhanden ist und wenn sie verwendet werden Wenn Sie auf die Benachrichtigung klicken (Zusammenfassung oder nicht), läuft alles gut und die Benachrichtigung wird problemlos verarbeitet. Wenn der Benutzer jedoch einen Sweep in der Benachrichtigung (Zusammenfassung oder nicht) durchführt oder auf die Schaltfläche Alle Benachrichtigungen löschen klickt, verschwindet die Benachrichtigung, aber der NotificationBroadcastReceiver wird nie aufgerufen (das Protokoll NotificationBroadcastReceiver: onReceive wird nicht in der Konsole angezeigt).

Was vermisse ich?

Antwort

0

Ich bin sehr beschämt! Ich habe den Grund meines Problems herausgefunden und es war völlige Dummheit.

In meinem AndroidManifest hatte ich dies:

<receiver android:name="auxiliary.NotificationBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="notification_cancelled"/> 
     </intent-filter> 
    </receiver> 

ich vergessen, den Punkt vor Hilfs. Sobald ich es ausdrücken:

<receiver android:name=".auxiliary.NotificationBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="notification_cancelled"/> 
      </intent-filter> 
     </receiver> 

der Empfänger Rückruf wurde aufgerufen.

Was mich überrascht ist, dass AndroidManifest keinen Fehler gab, der den falschen Pfad auflöst.