FLAG_ACTIVITY_NEW_TASK不打开以前的活动,而仅在新安装apk时打开

时间:2019-04-17 20:47:27

标签: java android android-intent

我正在开发一个使用FCM在后台接收通知的android库。点击通知后,应将用户重定向到上一个打开的活动-而不是启动活动。我使用标志FLAG_ACTIVITY_NEW_TASK完成此操作,并且该应用在两种情况下均按预期工作:1.如果直接在android studio中通过USB构建应用,则2.如果下载并安装了.apk应用程序,终止该应用程序,然后重新启动它。

但是,如果我将应用程序安装为.apk,则会出现以下现象:

1。。该应用会在启动活动A上打开。

2。。我导航到活动B并将应用程序置于后台

3。。我收到一条通知,然后点击它。该应用程序在活动A上打开,而不是在预期的活动B上打开。

我不了解将应用程序安装为apk和通过usb安装它之间的区别。使FLAG_ACTIVITY_NEW_TASK像单独活动一样对待活动是否有所不同?这是我的代码:

    Intent packageIntent = applicationContext.getPackageManager().getLaunchIntentForPackage(packageName);
    String mainClassName = packageIntent.getComponent().getClassName();
    Intent intent = new Intent(applicationContext, NotificationTapService.class);

(请注意,我之所以要设置一个中间意图来启动服务以重新打开上一个活动,是因为该服务还调用了一些不相关的分析功能)

    PendingIntent pendingIntent = PendingIntent.getService(applicationContext, requestCode, intent, PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder notificationBuilder =
    new NotificationCompat.Builder(applicationContext, applicationContext.getString(R.string.channel_id))
        .setSmallIcon(notificationResourceId)
        .setContentTitle(messageTitle)
        .setContentText(messageBody)
        .setStyle(new NotificationCompat.BigTextStyle()
            .bigText(messageBody))
        .setSound(defaultSoundUri)
        .setVibrate(new long[] {1000, 1000, 1000, 1000, 1000})
        .setLights(Color.BLUE, 3000, 3000)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)
        .setPriority(NotificationCompat.PRIORITY_MAX);
    NotificationManager notificationManager = (NotificationManager) applicationContext.getSystemService(applicationContext.NOTIFICATION_SERVICE);
    notificationManager.notify(messageId, notificationBuilder.build());

(在Back Stack顶部设置重新打开活动的意图)(来自NotificationTapService)

    Intent activityIntent = new Intent(applicationContext, Class.forName(intent.getExtras().getString(CLASS_NAME)));
    activityIntent.setAction(Intent.ACTION_MAIN);
    activityIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(activityIntent);

1 个答案:

答案 0 :(得分:0)

您尝试使用属性android:launchMode="singleTask"的此链接[Resume application and stack from notification