2017-07-20 3 views
-1

Ich habe meinen eigenen Push-Benachrichtigungsserver eingerichtet, um Benachrichtigungen an Android-Geräte zu senden.Handle sukzessive fcm Push-Benachrichtigung

Ich habe die Benachrichtigung bearbeitet, also klicke immer auf meine benutzerdefinierte Aktivität, egal welche App im Hintergrund oder Vordergrund war.

Der Arbeitsteil: Beim Senden von zwei Benachrichtigungen getrennt, das bedeutet, wenn die erste Meldung empfangen wird i darauf klicken, um die Aktivität gestartet wird, das ist ok. Ich sende erneut eine Benachrichtigung, also auch wenn ich darauf klicke alles geht gut und die Aktivität ist relooked.Perfect!

Der NICHT-Arbeitsteil: Wenn zwei aufeinanderfolgende Benachrichtigungen sendet das Problem auftritt. Wenn zwei Benachrichtigungen empfangen werden. Ich öffne die erste, die Aktivität wird gestartet, aber wenn ich auf die zweite klicke, passiert nichts !!

Also ich denke, es könnte eine Lösung bei der Änderung der Absicht FLAG oder Pending Intent sein.

Ich habe nach Lösungen gesucht, aber alle waren über die Handhabung der Benachrichtigung, wenn App im Vordergrund oder Hintergrund ist, was nicht in meinem Fall ist.

Das ist mein Arbeitscode:

Intent i = new Intent(this, News_description.class); 
        i.putExtra("title", title); 
        i.putExtra("message", message); 
        i.putExtra("image", image); 
        i.putExtra("time", time); 
        i.putExtra("date", date); 
        i.putExtra("click_action", click_action); 
        i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i,PendingIntent.FLAG_ONE_SHOT 
        ); 
        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
          .setAutoCancel(true) 
          .setSound(defaultSoundUri) 
          .setVibrate(new long[]{status, status}) 
          .setContentTitle(getString(R.string.app_name)) 
          .setContentText(title) 
          .setStyle(new NotificationCompat.BigTextStyle().bigText(title)) 
          .setSmallIcon(R.mipmap.ahed_me) 
          .setContentIntent(pendingIntent); 
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
        int id = (int) System.currentTimeMillis(); 
        manager.notify(id, builder.build()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

ich weitere Informationen zur Verfügung stellen kann.

Antwort

0

Ich habe die Flagge FLAG_ACTIVITY_CLEAR_TASK und es funktioniert auf meiner App.

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Hier meine vollständige Code, es funktioniert perfekt für mich:

 Intent i = new Intent(getApplicationContext(), MainActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

     PendingIntent contentIntent = 
       PendingIntent.getActivity(getApplicationContext(), 0, 
         i, 0); 

     NotificationCompat.Builder mBuilder = 
       (NotificationCompat.Builder) new NotificationCompat.Builder(getApplicationContext()) 
         .setSmallIcon(R.drawable.alarm) 
         .setAutoCancel(true) 
         .setContentTitle(title) 
         .setPriority(Notification.PRIORITY_MAX) 
         .setVibrate(vibrate) 
         .setLights(Color.BLUE, 3000, 1500) 
         .setStyle(new NotificationCompat.BigTextStyle() 
           .bigText(body)) 
         .setContentIntent(contentIntent) 

         .setContentText(body); 


     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     int Unique_Integer_Numbe = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE); 
     mNotificationManager.notify(Unique_Integer_Numbe, mBuilder.build()); 
+0

Problem .... –

+0

Versuchen Sie, was ich getan habe, und es wird nicht mit Ihnen arbeiten. Versuchen Sie, zwei aufeinander folgende Benachrichtigungen zu senden und dann eins nach dem anderen zu öffnen. Sie werden feststellen, dass die zweite Benachrichtigung nicht funktioniert. –

+0

Ich habe Ihr Problem gefunden: PadingIntent verwendet Folgendes: PendingIntent pendingIntent = PendingIntent.getActivity (getApplicationContext(), 0, i, 0); –

0

AKTUALISIERT:

public SomePushNotificationClass { 

    private static int NOTIFICATION_ID = 1; 
    String previousMessageID = "null"; 

    @Override 
    public void onReceive(Bundle data) { 

     String messageID = data.getString("message_id"); 

     if (!messageID.equals(previousMessageID) && !messageID.isEmpty()) { 
      previousMessageID = messageID; 

      NotificationManager notificationManager = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE); 

      Intent it = new Intent(this, SomeActivity.class); 
      it.putExtra("key_example_1", someValue); 
      it.putExtra("key_example_2", someValue2); 
      it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, it, PendingIntent.FLAG_UPDATE_CURRENT); 

      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
      notificationBuilder.setSmallIcon(R.drawable.some_drawable); 
      notificationBuilder.setLargeIcon(someIcon); 
      notificationBuilder.setContentTitle(someTitle); 
      notificationBuilder.setStyle(new 

      // Optional 
      NotificationCompat.BigTextStyle().bigText(someText)); 
      notificationBuilder.setContentText(someText); 
      notificationBuilder.setAutoCancel(true); 

      notificationBuilder.setContentIntent(pendingIntent); 
      notificationManager.notify(NOTIFICATION_ID, 
      notificationBuilder.build()); 

      NOTIFICATION_ID++; 
     } 
    } 
} 

Dies ist, was Sie brauchen:

Intent it = new Intent(this, SomeActivity.class); 
     it.putExtra("key_example_1", someValue); 
     it.putExtra("key_example_2", someValue2); 
     it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
+0

Dank ich es versuche –

+0

die Lösung u vorausgesetzt ich es getestet und ich habe: Auf Druck auf erste Benachrichtigung es die Details des zweiten zeigt, weil u vorgesehen: PendingIntent.FLAG_UPDATE_CURRENT so still funktioniert nicht –

+0

ich denke, dass die Flaggen, die Sie hinzugefügt haben, funktionieren gut, aber das Problem immer noch mit ausstehenden Absicht, weil mit Ihren Flags kann ich die beiden Benachrichtigungen öffnen, aber immer noch die Daten werden übergangen, da die Verwendung von FLAG_UPDATE_CURRENT –