Pending Intent会打开错误的活动

时间:2018-05-18 01:38:53

标签: android android-notifications android-pendingintent

我正在使用FirebaseMessagingService获取通知并在点击通知时打开应用。但每次我点击通知时,应用程序都会打开MainActivity而不是预期的ResultActivity。我还跟踪了PendingIntent文档中的文档,但仍然是这样做的。

    private void createNotification( String messageBody) {
        Intent intent = new Intent( this , ResultActivity.class );

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent resultIntent = PendingIntent.getActivity( this , 0, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);
//        PendingIntent resultPending = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        Uri notificationSoundURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder( this)
                .setContentTitle("VERA")
                .setContentText(messageBody)
                .setAutoCancel( true )
                .setSound(notificationSoundURI)
                .setContentIntent(resultIntent);

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


        notificationManager.notify(0, mNotificationBuilder.build());
    }

这是我的清单。

<activity
    android:name=".MainActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
    <activity android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:excludeFromRecents="true"
        android:taskAffinity=""></activity>

编辑:我试图传递一些额外的字符串,但主要活动甚至没有收到任何东西。 notif是否可能只触发其默认方法来启动应用程序?

2 个答案:

答案 0 :(得分:0)

创建一个启动Activity的Intent。

通过使用标记setFlags()FLAG_ACTIVITY_NEW_TASK调用FLAG_ACTIVITY_CLEAR_TASK,将活动设置为在新的空任务中启动。

通过调用PendingIntent创建getActivity()

像,

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);

然后您可以像往常一样将PendingIntent传递给通知:

NotificationCompat.Builder mNotificationBuilder= new NotificationCompat.Builder(this, "CHANNEL_ID");
builder.setContentIntent(notifyPendingIntent);
...
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(0, mNotificationBuilder.build());

答案 1 :(得分:0)

显然,无法仅使用FCM控制台触发onMessageReceived。只有在我使用其他方式发送数据消息时才会触发它。