2011-05-31 20 views
1

從網絡瀏覽器打開活動後清除堆棧我的應用程序有一個活動,在瀏覽器中啓動oauth授權過程,最後瀏覽器接收重定向到url「appname ://com.appname「,回調我的活動。 (活動聲明它可以查看此類網址)通過url「appname://com.appname/」

一切都可以,但如果用戶按下「返回」,他會返回到網絡瀏覽器。 當活動被回叫時,我想清除歷史堆棧,使這個活動成爲這個任務的根和頂部。

我可以在這種情況下使用哪些標誌或掛鉤?


我發現只有一個醜陋的解決方案: 接收應用程序的名字://com.appname網址,以特殊的「插科打諢」活動,將在其推出的onResume主要活動。

我試圖讓主要活動「singleTask」,在新任務中啓動瀏覽器,設置標誌NO_HISTORY和EXLUDE_FROM_RECENTS,CLEAR_TOP,設置clearTaskOnLaunch =「true」。 嘗試清單中的標誌和標籤的許多組合 - 沒有任何幫助。


我解決了這個問題:
1)在AndroidManifest.xml
2)在新任務啓動瀏覽器(與FLAG_ACTIVITY_NEW_TASK)設置clearTaskOnLaunch = 「真」,並完成當前活動(完成當前任務)。
3)覆蓋onBackPressed:而不是完成此活動調用moveTaskToBack(true);

當用戶按回 - 任務(瀏覽器在它的根目錄)去背景和用戶看到他的主屏幕。

當用戶再次啓動應用程序 - 它從現有實例打開,清除任務,併成爲它的根目錄(因爲clearTaskOnLaunch =「真」)

回答

0

當點擊鏈接應用程序名稱://com.appname在Web瀏覽器中,瀏覽器調用您的活動,但瀏覽器本身並沒有完成調用,您無法更改瀏覽器。

我認爲做一個有webview的新活動可以解決這個問題。

您將開始新的活動,而不是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) { 
    } 
});