Мое приложение Android определяет действие с фильтром намерений android.intent.action.CREATE_SHORTCUT, который позволяет мне отображаться в списке ярлыков, которые пользователь может добавить на свою домашнюю страницу, когда он выбирает «Добавить ярлык» из меню или долго нажмите на домашнюю страницу.
В этом упражнении у меня есть следующий код (на самом деле происходит в событии щелчка после выбора ярлыка для добавления):
Intent shortcutIntent = new Intent(this,MyActivity.class);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(this, R.drawable.myicon);
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyAppName");
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
setResult(RESULT_OK, intent);
finish();
Ярлык работает, как я и ожидал, до перезагрузки устройства. Я на самом деле тестирую на эмуляторе, а не на реальном устройстве. Ярлык все еще остается после перезагрузки, поэтому я знаю, что не стирал пользовательские данные или что-то в этом роде, но он действует так, как будто больше не имеет настройки FLAG_ACTIVITY_NEW_TASK при нажатии.
Пример шагов для воссоздания (для ясности предположим, что мое приложение является почтовым ящиком):
Создать ярлык
Запустите мою работу с входящими сообщениями из моего главного меню, в котором используется флаг NEW_TASK.
В папке входящих сообщений щелкните сообщение, чтобы открыть действие просмотра сообщения.
Нажмите клавишу HOME
Нажмите на ярлык - на этом этапе он возвращает весь «стек задач» вперед, с операцией просмотра сообщений в верхней части стека, нажатие назад возвращает к работе с входящими сообщениями, как я бы сделал ожидать
Перезагрузите устройство
Повторите шаги со 2 по 5 .. теперь, когда я нажимаю на ярлык, вместо переноса действия просмотра сообщения на передний план, это переносит задачу на передний план, но затем добавляет новую активность входящих сообщений поверх стек. Поэтому нажатие НАЗАД один раз возвращает к активности просмотра сообщений и снова к активности входящих сообщений.
Я также пытался установить различные свойства, такие как singleTask, для своей активности входящих сообщений в манифесте приложения, но мне не повезло. Это известная проблема, что флаги не сохраняются с ярлыками?
Думаю, я попытаюсь добавить новую активность-заглушку, которая ничего не делает, но запускает реальную операцию с флагом NEW_TASK, а затем завершает работу, и вместо этого мои ярлыки указывают на это. Тем не менее, кажется, что это накладные расходы, так что, надеюсь, у кого-то есть лучший ответ.