FLAG_ACTIVITY_NEW_TASK не открывает предыдущее действие, а только при новой установке apk - PullRequest
2 голосов
/ 17 апреля 2019

Я занимаюсь разработкой библиотеки Android, которая использует FCM для получения уведомлений в фоновом режиме.После нажатия на уведомление пользователь должен быть перенаправлен на последнее открытое действие, а не на запуск.Для этого я использую флаг FLAG_ACTIVITY_NEW_TASK, и приложение работает, как и ожидалось, в двух случаях: 1. если я создаю приложение напрямую через USB в Android Studio и 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());

(настройка намерения повторно открыть действие в верхней части заднего стека) (из 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 голосов
/ 18 апреля 2019

Вы попробуете по этой ссылке [ Возобновить приложение и составить из уведомления со свойствами android:launchMode="singleTask"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...