Очистить стек обратно после того, как активность открывается из веб-браузера по URL "appname: //com.appname/" - PullRequest
1 голос
/ 31 мая 2011

У моего приложения есть действие, которое запускает процесс oauth-авторизации в браузере, и, наконец, браузер получает перенаправление на URL "appname: //com.appname", который вызывает мою активность.(активность объявила, что может просматривать такие URL)

Все в порядке, но если пользователь нажимает «Назад», он возвращается в веб-браузер.Я хочу очистить стек истории при повторном вызове активности, чтобы сделать это действие корнем и вершиной в этой задаче.

Какие флаги или хуки можно использовать для этого случая?


Я нашел только одно уродливое решение: receive appname: //com.appname ссылается на специальное действие «Gag», которое запустит основное действие на своем onResume.

Я попытался сделать основное действие «singleTask»,запустить браузер в новой задаче, установить флаги NO_HISTORY и EXLUDE_FROM_RECENTS, CLEAR_TOP, установить clearTaskOnLaunch = "true".Перепробовал много комбинаций этих флагов и тегов в манифесте - ничего не помогает.


Я решил эту проблему:
1) set clearTaskOnLaunch = "true" в AndroidManifest.xml
2) Запустите браузер в новой задаче (с FLAG_ACTIVITY_NEW_TASK) и завершите текущийдействие (чтобы закончить текущую задачу).
3) переопределить onBackPressed: вместо завершения этого действия вызовите moveTaskToBack (true);

когда пользователь нажимает назад - задание (браузер находится в его корне) переходит в фоновый режим, и пользователь видит свой домашний экран.

когда пользователь снова запускает приложение - оно открывается из существующего экземпляра, очищает задачу и становится ее корнем (поскольку clearTaskOnLaunch = "true")

1 Ответ

0 голосов
/ 31 мая 2011

Когда в веб-браузере нажимают ссылку appname: //com.appname, браузер вызывает вашу активность, но браузер не вызывал завершить себя, вы не можете изменить браузер.

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

Вы запустите эту новую деятельность вместо браузера Android.В новом упражнении установите webViewClient для возврата к вашему основному занятию:

wv_mem_rank.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.startWith("appname://com.appname"))
        {
            startActivity();
            finish();
        }
        view.loadUrl(url);
        return true;
    }
    public void onLoadResource (WebView view, String url) {
    }
    public void onPageFinished(WebView view, String url) {
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...