为什么PendingIntent打开应用程序的启动器活动而不是特定活动?

时间:2016-11-22 09:07:14

标签: android android-pendingintent firebase-notifications

我正在使用firebase发送通知。当用户单击通知时,它将打开ResultActivity。当app在前台时它工作正常。但是当应用程序处于后台时,它会打开HomeActivity(这是应用程序的启动器活动)而不是ResultActivity。我无法理解这个问题是什么?

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle(getResources().getString(R.string.app_name));
        notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);

        Intent intent = new Intent(getApplicationContext(), ResultActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);

        notificationBuilder.setContentIntent(pendingIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
    }
}

1 个答案:

答案 0 :(得分:0)

这是测试click_action映射的好方法。它需要一个类似于FCM文档中指定的意图过滤器:

<intent-filter>
    <action android:name="OPEN_ACTIVITY_1" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

另外,请记住,这仅适用于应用程序位于后台的情况。如果它在前台,您将需要实现FirebaseMessagingService的扩展。在onMessageReceived方法中,您需要手动导航到click_action目标

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    //This will give you the topic string from curl request (/topics/news)
    Log.d(TAG, "From: " + remoteMessage.getFrom());
    //This will give you the Text property in the curl request(Sample     Message): 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
    //This is where you get your click_action 
    Log.d(TAG, "Notification Click Action: " + remoteMessage.getNotification().getClickAction());
    //put code here to navigate based on click_action
    }