ФОН
У меня есть задача (то есть приложение) с несколькими действиями.
ВОПРОС
Как вывести задачу на передний план без переупорядочения стека активности для этой задачи?
СЦЕНАРИЙ ПОЛЬЗОВАТЕЛЯ
Когда устройство загружается (т.е. после получения широковещательной рассылки android.intent.action.BOOT_COMPLETED), мое приложение запускается, вызывает эту задачу 1 и отображает действие A (код ниже). Когда пользователь взаимодействует с задачей 1, он / она открывает операцию B в стеке (операция B теперь отображается на экране). Затем пользователь нажимает клавишу «Домой» и открывает другую задачу, называет ее задачей 2, затем блокирует экран. Пользователь разблокирует экран, и намерение android.intent.action.USER_PRESENT передается и принимается моим приложением (см. Фрагмент кода ниже). My выполняет вызов startActivity () в моем классе IntentReceiver, как и ожидалось, но вместо того, чтобы просто вывести задачу на передний план, она создает новую задачу, вызывая ее как задачу 3.
ИЗМЕНЕНИЯ, КОТОРЫЕ Я ПРОБОВАЛ
Если я изменяю или изменяю Intent.FLAG_ACTIVITY_NEW_TASK на любое другое намерение, я получаю это сообщение об ошибке:
Для вызова startActivity () вне контекста Activity требуется
флаг FLAG_ACTIVITY_NEW_TASK. Вы действительно этого хотите?
... похоже, мне нужно использовать Intent.FLAG_ACTIVITY_NEW_TASK.
Если я изменю lauchMode основного действия на «singleTask», правильная задача будет выведена на передний план (т. Е. Новая задача не создана), но стек действий будет переупорядочен так, чтобы активность_А находилась на вершине стека.
На данный момент я в растерянности относительно того, как вывести существующую задачу на передний план без переупорядочения стека активности при прослушивании намерения android.intent.action.USER_PRESENT, любая помощь будет принята с благодарностью.
Кстати, это приложение доставляется группе сотрудников, а не широкой публике, на принадлежащих компании устройствах Android.
КОДОВЫЕ ОШИБКИ
Чтобы запустить приложение, я настроил приемник вещания в моем файле манифеста.
<application
:
<activity
android:label="@string/app_name"
android:launchMode="singleTop"
android:name=".activities.activity_A" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
:
<receiver
android:enabled="true"
android:name=".utilities.IntentReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
В моем классе IntentReceiver я начинаю свою основную деятельность ...
public class IntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, activity_A.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}