簡體   English   中英

如何在Android上的注冊應用程序中從我的WebView中啟動Web鏈接?

[英]How to launch a web link from within my WebView in a registered app on Android?

在我的Android應用程序中,我有一個WebView。 我希望在我的WebView中單擊每個鏈接以在我的設備上啟動已注冊的應用程序(如果有),否則在外部瀏覽器中打開。 例如,如果用戶點擊WebView內的Facebook頁面鏈接,它應該啟動Facebook應用程序(如果Facebook在設備上注冊以處理Facebook鏈接)。 如果沒有注冊應用程序,它應該啟動外部瀏覽器(即,它不應該在同一個WebView中加載頁面)。

目前(默認情況下),WebView只會加載在WebView內單擊的任何鏈接。

我意識到我需要覆蓋shouldOverrideUrlLoading來攔截這些鏈接點擊:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // what should go here to trigger the registered app or fall back to external browser for all link clicks in the WebView?
    }
}); 

我也查看了intent過濾器,但這似乎與此要求相反(意圖過濾器似乎是我注冊我的 Android應用程序以處理其他地方的網頁點擊的方式)。

更新1

打算攔截任何特定的主機名或方案 - 我希望在我的網頁視圖中點擊的每個鏈接被“委托”到android,其中android決定是否啟動已注冊的應用程序,彈出一個選項供用戶選擇根據用戶設置打開或在Web瀏覽器中打開的應用程序。

具體來說,如果我點擊https://www.facebook.com/blah的鏈接,它應該在facebook應用程序中啟動並帶我到那里的blah頁面。

修復只涉及處理shouldOverrideUrlLoading為true,如果url不在我自己的應用程序中,則返回true。 返回true時,它會啟動已注冊的應用程序或應用程序選擇器對話框或瀏覽器,具體取決於配置的上下文。

mWebview.setWebViewClient(new WebViewClient()
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        boolean isLocalUrl = false;
        try {
            URL givenUrl = new URL(url);
            String host = givenUrl.getHost();
            if(host.contains("myapp.com"))
                isLocalUrl = true;

        } catch (MalformedURLException e) {

        }

        if (isLocalUrl)
            return super.shouldOverrideUrlLoading(view, url);
        else
        {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
});

我也意識到Android上的當前狀態(我在小米Mi 4上測試MIUI 7,基於Android Kitkat,但論壇表明這對於大多數前Marshmallow機器人來說至少是這樣),其中有一個指向facebook頁面的鏈接WebView無法在Facebook應用中打開。 它也不會給用戶提供在Facebook應用程序中打開的選項。 這曾經比較早,但現在不起作用。 如果我們使用上面的代碼,它總是在瀏覽器中啟動。 由於這個原因,發生了很多誤解。 它與其他網站(推特,quora等)一樣有效。

在Android中可以打開點擊網絡鏈接的應用程序,我們已經看到許多應用程序已經這樣做了。 您可以在應用程序的WebBrowserActivity中注冊hostUri方案,當用戶點擊外部應用程序的任何鏈接時,如果主機名和Uri方案與您注冊的方案匹配,則會打開您的應用程序。 正如開發人員文檔所說,您應該知道超鏈接的主機和方案,任何隨機鏈接都不會打開您的應用程序。

禮貌: https//developer.android.com/training/app-links/index.html

我相信,從應用程序的WebView打開一個特定的活動應該只使用IntentFilters來完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM