FLAG_ACTIVITY_NEW_TASK не открывает предыдущее действие, а только при новой установке apk

1

Я разрабатываю библиотеку 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 рассматривать ее как отдельную 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);
Теги:
android-intent

1 ответ

0

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

  • 0
    Спасибо за ответ! Большинство из этих решений работают для меня, но не при первой установке. Я до сих пор не уверен, в чем разница между сборкой через USB и установкой намерений запуска apk WRT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню