Возобновите мое приложение так же, как оно возобновилось из истории

Я пишу SDK для использования в хостинге. Мой SDK создает уведомление, которое должно возобновить приложение, точно так же, как вы нажимаете кнопку "Задачи" и выбираете приложение, или долго нажимаете кнопку "Домой" и выбираете свое приложение.

Вот что я пытался сделать:

        PackageManager packageManager = context.getPackageManager();
        intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
        intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 10, intent, flags);
        Notification notification = new NotificationCompat.Builder(context).
            setContentIntent(pendingIntent).
            ...
            build();

        getNotificationManager().notify(NOTIFICATION_ID, notification);

Я тестировал это приложение на хосте с одной активностью запуска с режимом обеда "по умолчанию" (в манифесте не было установлен режим запуска), и мой sdk также получил 1 активность в режиме "singleTask" в режиме обеда.

  • Итак, я обедаю приложение
  • Запустите мою работу с SDK, она запускает тестовое уведомление в методе onCreat.
  • Я прихожу домой
  • Я нажимаю на уведомление.

После выполнения этих шагов я ожидаю, что вернусь к своей активности, но вместо этого откроет еще один экземпляр активности запуска хоста. Что мне не хватает? Как это сделать?

Ответы

Ответ 1

Если вы хотите возобновить работу после паузы, удалите флаг " NEW_TASK". Это не станет новой задачей. Надеюсь, вы сочтете это полезным в своей задаче.

Ответ 2

В соответствии с вашим требованием хост-приложение должно установить " singleTop" режим запуска при активности запуска, а из вашего SDK вы не можете его установить. Как-то вам нужно сообщить хост-приложению, чтобы установить этот флаг.

Как только вы установите режим запуска "singleTop", вы получите новое намерение, переопределив методNewIntent(), и ваша активность будет в том же состоянии, что и предыдущее.

Ответ 3

В вашем файле AndroidManifest.xml перейдите в свою основную декларацию активности и используйте android:launchMode="singleTask" следующим образом:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Таким образом, если задача уже запущена в фоновом режиме, система выведет ее на передний план, позволяя пользователю продолжить то, что он делал, прежде чем действие было перенесено на задний план.