Как я могу сделать это в Android.Активность -> Веб-браузер -> Acrivity, но нажмите Назад, чтобы не видеть Веб-браузер - PullRequest
6 голосов
/ 16 марта 2011

Как я могу сделать так, чтобы веб-браузер вызывал пользовательскую схему для запуска действия, затем я хочу нажать кнопку Назад, но не возвращать веб-браузер.

Я просто хочу реализовать переадресацию при вызовевеб-браузер, затем вызовите мою схему, чтобы начать другую активность.Когда я вернусь, мне не понравится веб-браузер.

Как мне это сделать?

Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.setData(Uri.parse(url));
startActivity(i);

Я уже добавил его, но он не работает!

Ответы [ 5 ]

7 голосов
/ 31 августа 2011

Как объяснили другие пользователи, ваша активность создается в стеке браузера. Вы не можете запретить браузеру открываться в своем стеке, но вы можете выполнить ту же настройку в своем приложении.

В своей деятельности, вызываемой браузером, добавьте в файл манифеста следующее:

android:allowTaskReparenting="true"
android:launchMode="singleTask"

Это создаст вашу активность в стеке приложений (а не в браузере). Это в основном вернет ваше приложение на передний план.

android: launchMode = "singleTop" не будет работать, потому что он предотвращает создание нового действия только в том случае, если это действие находится на вершине стека, а это не так, поскольку браузер в настоящее время находится наверху. android: launchMode = "singleTask" гарантирует, что другие экземпляры не будут созданы независимо от того, находятся они сверху или нет.

Если вы установили Intent.FLAG_ACTIVITY_NO_HISTORY с указанной выше конфигурацией, то все должно работать нормально, независимо от того, был ли ранее открыт браузер или нет. В худшем случае браузер будет в нижней части стека, и если вы продолжите наносить ответный удар, вы в конечном итоге достигнете браузера, а не выйдете из приложения.

1 голос
/ 16 марта 2011

Когда вы открываете свое намерение, возможно, вы можете установить его с флагом отсутствия истории

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
0 голосов
/ 28 декабря 2011

Я тоже с этим сталкиваюсь. Вот резюме:

  1. Если браузер раньше не работал, он хорошо работает с ответами выше; если браузер запускался раньше:
  2. intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) НЕ работает;
  3. android:allowTaskReparenting="true" android:launchMode="singleTask" похоже на то, что браузер помещается внизу стека активности, но после выхода из приложения (клавишей BACK) браузер снова запускается.

Так что в основном эта проблема все еще существует. Я опубликую, если найду способ решить эту проблему.

0 голосов
/ 08 апреля 2011

Я обнаружил, что только Intent.FLAG_ACTIVITY_NO_HISTORY работает, только если браузер раньше не работал.Если я перезагружаю Android и запускаю приложение, которое вызывает браузер, все работает хорошо.Но когда я запускаю браузер перед моим приложением, браузер остается в истории.

Я пытался добавить манифест к определению активности android: launchMode = "singleTop" в соответствии с пользователем 634618.Но это не работает.Я не понимаю, почему SingleTop должен помочь.

В документации также это:

BlockquoteВ качестве другого примера, приложение для браузера Android заявляет, что веб-браузерактивность должна всегда открываться в своей собственной задаче - путем указания режима запуска singleTask в элементе.Это означает, что если ваше приложение выдает намерение открыть браузер Android, его деятельность не помещается в ту же задачу, что и ваше приложение.Вместо этого либо запускается новая задача для браузера, либо, если браузер уже имеет задачу, выполняющуюся в фоновом режиме, эта задача переносится для обработки нового намерения.

Я думаю, что это вызываетпроблема.Но как заставить браузер запускаться в текущей задаче?

0 голосов
/ 17 марта 2011

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

Если вы выполняете второе задание, которое запускается для другой задачи, нажатие кнопки «назад» должно завершить эту задачу и вернуться к задаче позади браузера.

Для этого вы можете использовать FLAG_ACTIVITY_NEW_TASK в намерении, начиная с действия 2, или установить атрибут android:launchMode действия на singleTop в своем манифесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...