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

Я пишу 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».

  1. Поэтому я обедаю приложение
  2. Запустите мою SDK-активность, она запускает тестовое уведомление в методе onCreat.
  3. Я прижимаю домой
  4. Я нажимаю на уведомление.

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

Если вы хотите возобновить работу после паузы, удалите флаг « 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> 

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

Intereting Posts
Как использовать SupportMapFragment внутри фрагмента? Как я могу предотвратить дикую прокрутку, когда поле формы ввода фиксированной позиции получает фокус? Учетная запись Google Play Publisher завершена, может ли другой разработчик опубликовать мои приложения? Handler.removeCallbacksAndMessages (null) и основной петлитель Меню в системной панели Android 3.0 Hex Colors на Android – это 8 цифр. Как? В чем разница между #FFFFFF и # FFFFFF00 Центр Drawable и текст в EditText Ошибка с кнопкой в ​​приложениях Phonegap / Cordova и Android 4.4.3 KitKat (быстрый клик?) Извлечение файлов изображений из синтаксического анализа Android: конвертировать поток в строку без исчерпания памяти Как записать экран Android с Android Studio? Заменить селекторные изображения программно Элемент Google Chrome для Android <select> не выбирает никакой опции PhoneGap – кнопка для основного домашнего экрана телефона Когда использовать какой конструктор для ComponentName в Android?