1

Ich möchte Detailaktivität auf Benachrichtigung Klickereignis öffnen. Hier ist die PendingIntent und Notification eingestellte Klasse. Ich fügte hinzu addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) auch PendingIntent.FLAG_UPDATE_CURRENT hinzugefügt. Ich suchte alle Themen vor Ort, ich fand diese Lösungen, die ich alle versuchte. HierPendingIntent funktioniert nicht mit FCM-Benachrichtigung

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 
    /** 
    * Called when message is received. 
    * 
    * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. 
    */ 
    // [START receive_message] 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     // TODO(developer): Handle FCM messages here. 
     // If the application is in the foreground handle both data and notification messages here. 
     // Also if you intend on generating your own notifications as a result of a received FCM 
     // message, here is where that should be initiated. See sendNotification method below. 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 
     Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 

     ArrayList<String> notificationData = new ArrayList<String >(remoteMessage.getData().values()); 
     String fortuneID = notificationData.get(0); 
     sendNotification(remoteMessage.getNotification().getBody(),fortuneID); 
    } 
    // [END receive_message] 

    /** 
    * Create and show a simple notification containing the received FCM message. 
    * 
    * @param messageBody FCM message body received. 
    */ 
    private void sendNotification(String messageBody,String notificationID) { 

     Intent configureIntent = new Intent(getApplicationContext(), FalDetayActivity.class); 
     configureIntent.putExtra("extra", "123123"); 
     configureIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     configureIntent.setAction("dummy_unique_action_identifyer" + "123123"); 
     int dummyuniqueInt = new Random().nextInt(543254); 
     PendingIntent pendingClearScreenIntent = PendingIntent.getBroadcast(getApplicationContext(), dummyuniqueInt, configureIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("myApp") 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingClearScreenIntent); 

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

     notificationManager.notify(1 /* ID of notification */, notificationBuilder.build()); 
    } 
} 

ist der getBundle Teil MainActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String quote = getIntent().getStringExtra("extra"); 

     ... 
} 

Ein weiteres Problem, das ich will FalDetailActivity öffnen, aber immer offen MainActiviy und getIntent() immer null zurück. Wahrscheinlich, meine PendingIntent nicht gesetzt, ich habe keinen Fehler gefunden, bitte überprüfen Sie diesen Code. Dank ...

UPDATE

ich getBroadcast-getActivity aktualisieren und entfernen Sie etwas

 Intent configureIntent = new Intent(getApplicationContext(), FalDetayActivity.class); 
     configureIntent.putExtra("extra", "123123"); 
     configureIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingClearScreenIntent = PendingIntent.getActivity(getApplicationContext(), 0, configureIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

** configureIntent.setAction ("dummy_unique_action_identifyer" + "123123"); ** versuchen, diese Zeile und den Versuch zu entfernen. –

+0

entfernte ich noch nicht –

+0

arbeiten statt mit ** PendingIntent.getBroadcast() ** Nutzung ** PendingIntent.getActivity() ** –

Antwort

1

Endlich fand ich die Lösung: https://firebase.google.com/docs/notifications/android/console-audience

Wenn Ihre App im Hintergrund ist, richtet Android Benachrichtigungen an das Systemfach. Ein Benutzer, der auf die Benachrichtigung klickt, öffnet standardmäßig den App Launcher.

Dies umfasst Nachrichten, die sowohl Benachrichtigungs- als auch Datennutzdaten enthalten. In diesen Fällen wird die Benachrichtigung an die Systemablage des Geräts gesendet, und die Datennutzlast wird in den Extras mit der Absicht Ihrer Startaktivität geliefert.

+0

können Sie mir sagen, was ist der Code hinter Datennutzlast?kannst du mir den ganzen Code sagen? onMessageRecive-Methode nicht aufgerufen, wenn App im Hintergrund, wie können Sie dann Daten Nutzlast in welcher Klasse? was ist der Code? Bitte sagen Sie mir .. –

+0

Schön, dass Sie eine Lösung gefunden haben, aber wo erhalten Sie die Daten in der Launcher-Aktivität? Ich kann es nirgends finden. – jobbert

0

Sie wollen eine Aktivität mit Ihrer ausstehenden Absicht zu starten, nicht eine Sendung schicken. Ändern Sie PendingIntent.getBroadcast(...) zu PendingIntent.getActivity(...).

Anstatt getApplicationContext() zu verwenden, versuchen Sie, den Kontext des Dienstes zu verwenden, d. H. Ersetzen Sie getApplicationContext() durch this.

Da Sie eine Aktivität von einem Dienstkontext starten, müssen Sie auch die neue Aufgabe Absicht Flag hinzuzufügen -

configureIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Verwenden Sie auch diese Flags für Ihre ausstehenden Absicht -

PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT 
+0

Ich Frage aktualisieren, aber immer noch nicht arbeiten –