Ответ 1
Если вы хотите возобновить работу после паузы, удалите флаг " NEW_TASK". Это не станет новой задачей. Надеюсь, вы сочтете это полезным в своей задаче.
Я пишу 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" в режиме обеда.
После выполнения этих шагов я ожидаю, что вернусь к своей активности, но вместо этого откроет еще один экземпляр активности запуска хоста. Что мне не хватает? Как это сделать?
Если вы хотите возобновить работу после паузы, удалите флаг " NEW_TASK". Это не станет новой задачей. Надеюсь, вы сочтете это полезным в своей задаче.
В соответствии с вашим требованием хост-приложение должно установить " singleTop" режим запуска при активности запуска, а из вашего SDK вы не можете его установить. Как-то вам нужно сообщить хост-приложению, чтобы установить этот флаг.
Как только вы установите режим запуска "singleTop", вы получите новое намерение, переопределив методNewIntent(), и ваша активность будет в том же состоянии, что и предыдущее.
В вашем файле 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>
Таким образом, если задача уже запущена в фоновом режиме, система выведет ее на передний план, позволяя пользователю продолжить то, что он делал, прежде чем действие было перенесено на задний план.