В моем приложении есть уведомление на основе Firebase.Получив сообщение с сервера, я вижу уведомление в своем телефоне.Но когда я нажимаю на сообщение в уведомлении, оно всегда открывает мой экран-заставку, за которым следует LoginActivity вместо MainActivity.Я хочу открыть MainActivity и показать детали сообщения, для которого я передаю тело сообщения уведомления в MainActivity с помощью putExtra.
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Calling method to generate notification
sendNotification(remoteMessage.getNotification().getTitle().toString(), remoteMessage.getNotification().getBody());
}
//This method is only generating push notification
private void sendNotification(String messageTitle, String messageBody) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Title", messageTitle);
intent.putExtra("data", messageBody);
intent.putExtra("KEY", "Notify");
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
numNotifications = numNotifications + 1;
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
inboxStyle.setBigContentTitle(getString(R.string.app_notification)) ;
inboxStyle.setSummaryText(getString(R.string.app_count_notifications1)
+ numNotifications + getString(R.string.app_count_notifications2));
inboxStyle.bigText(messageBody);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.q_me_notify)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setStyle(inboxStyle)
.setGroup(TAG)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
try {
notificationManager.notify(TAG, APPID, notificationBuilder.build());
} catch (Exception e) {
e.printStackTrace();
}
}
Мой файл манифеста Android выглядит следующим образом:
<application
android:allowBackup="true"
android:icon="@drawable/final"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LoginActivity"
android:theme="@style/LoginTheme"
android:launchMode="singleTask"/>
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme"
android:launchMode="singleTask"/>
<!-- Defining Services -->
<service android:name=".services.FirebaseMessageService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".services.FirebaseInstanceService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
Это происходит в моем Samsung On8 (J7 Pro) с Android 7.0 - независимо от того, находится ли приложение на переднем или заднем плане (оно всегда открывает LoginActivity).Но в моем Nexus 5 с Android 5.1.1 такое поведение наблюдается только тогда, когда приложение в фоновом режиме / завершено, тогда как оно работает, когда приложение находится на переднем плане.
Итак, мои вопросы:
Как сделать так, чтобы приложение отображало MainActivity на переднем плане независимо от модели и версии ОС, чтобы данные сообщения уведомления отображались правильно?
Когдаприложение находится в фоновом режиме / завершено, как я могу передать значения уведомлений (Splash -> LoginActivity -> MainActivity), чтобы сообщение правильно отображалось в MainActivity?