Перезапустите существующую задачу в последних приложениях из службы.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Перезапустите существующую задачу в последних приложениях из службы.

Сообщение Anonymous »

Я пытаюсь запустить определенное приложение, которое появляется на экране последних приложений, из службы, учитывая имя пакета приложения. Следующее обычно работает:

Код: Выделить всё

context.startActivity(new Intent().setPackage(packageName).setAction(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent.FLAG_ACTIVITY_NEW_TASK требуется при запуске действия вне контекста действия (в данном случае службы специальных возможностей). Несмотря на то, что это будет означать, что будет создана НОВАЯ задача, она успешно перезапускает задачу, которая была видна в последних, если она уже существовала. Если нет, создается новое.
Однако вышеописанное НЕ работает, когда рассматриваемое приложение изначально было запущено из другого приложения. Например, если com.android.settings изначально был запущен из системного уведомления или из другого приложения, приведенный выше код запустит новый экземпляр com.android.settings вместо вызова того, который уже отображался в последних приложениях. Я пробовал добавлять разные флаги, но безрезультатно.
Есть ли у кого-нибудь решение этой проблемы или хотя бы объяснить, почему это происходит?
РЕДАКТИРОВАТЬ:
Я добавляю дополнительные шаги о том, как воспроизвести это и результаты действий активности adb Shell dumpsys.
Шаги для воспроизвести:
  • Очистить все задачи
  • Попробуйте удалить приложение администратора устройства прямо из панели запуска, перетащив его на кнопку «Удалить». Произойдет сбой, и отобразится уведомление.
  • Нажмите на уведомление, чтобы открыть приложение «Настройки» на странице администратора устройства.
  • Запустите com.android. настройки из кода:
context.startActivity(new Intent().setPackage("com.android.settings").setAction(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ИЛИ

Код: Выделить всё

context.startActivity(packageManager.getLaunchIntentForPackage("com.android.settings"));
[*]Откройте экран последних приложений, чтобы проверить, присутствуют ли теперь 2 задачи настроек.

Вот результат «действий активности оболочки adb dumpsys» для:
Настройки, открытые при неудачном удалении администратора устройства.
Настройки открываются как при неудачном удалении администратора устройства, так и при наш собственный код.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -a-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»