单击通知而不是MainActivity(另一个活动)时如何启动新活动?

时间:2018-12-22 14:49:45

标签: android android-service android-pendingintent android-push-notification

点击通知后,我尝试启动新活动,而不是MainActivity。单击通知后,它总是启动mainactivity。请帮助我

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle("NOTIFICATION");
        notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSmallIcon(R.drawable.ic_launcher_foreground);
        notificationBuilder.setContentIntent(pendingIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
}

1 个答案:

答案 0 :(得分:0)

根据文档:https://developer.android.com/training/notify-user/navigation#java

  • 定义应用的“活动”层次结构
  • 使用后置堆栈构建PendingIntent

您可以通过调用getActivity()创建PendingIntent,但还应确保已在清单中定义了适当的任务选项。

1。在清单中,将以下属性添加到元素。     android:taskAffinity =“” 将此属性与将在代码中使用的FLAG_ACTIVITY_NEW_TASK标志结合使用,将此属性设置为空白可确保此活动不会进入应用程序的默认任务。具有应用程序默认关联性的所有现有任务均不会受到影响。 android:excludeFromRecents =“ true” 从“最新记录”中排除新任务,以使用户不会意外地导航到该任务。 例如:

<activity
  android:name=".ResultActivity"
   android:launchMode="singleTask"
   android:taskAffinity=""
   android:excludeFromRecents="true">
</activity>
  1. 构建并发布通知: 创建一个启动活动的意图。 通过调用带有标志FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK的setFlags(),将“活动”设置为开始一个新的空任务。 通过调用getActivity()创建一个PendingIntent。 例如:

     Intent notifyIntent = new Intent(this, ResultActivity.class);
     // Set the Activity to start in a new, empty task
     notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);
     // Create the PendingIntent
     PendingIntent notifyPendingIntent = PendingIntent.getActivity(
     this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT
     );
    
  2. 然后您可以像往常一样将PendingIntent传递给通知:

     NotificationCompat.Builder builder = new NotificationCompat.Builder(this, 
     CHANNEL_ID);
     builder.setContentIntent(notifyPendingIntent);
     //remaining code
     NotificationManagerCompat notificationManager = 
     NotificationManagerCompat.from(this);
     notificationManager.notify(NOTIFICATION_ID, builder.build());
    

有关更多信息,您可以参考上面的链接或以下链接:Notification click: activity already open