WebView通過隱式啟動跳轉(zhuǎn)到Activity頁面

利用系統(tǒng)提供的隱式啟動,從Html網(wǎng)頁中跳轉(zhuǎn)到Activity。V

<!DOCTYPE HTML>
<html>
<body>

<a href="myapp://tonative/param?id=123" style=" color:#666; fontsize:50px;">OpenCihon</a>

</body>
</html>

當我們在webview里加載上面的代碼,并點擊OpenCihon后,系統(tǒng)會去尋找能處理uri為”myapp://tonative/param?id=123”的Activity,默認情況下當然是沒有的,所以我們可以把要打開的Activity按照約定的uri協(xié)議進行聲明

 <activity android:name=".FanhuaResultActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="tonative"
                    android:scheme="myapp" />
            </intent-filter>
        </activity>

我們可以通過聲明不同的host實現(xiàn)打開不同的Activity,在打開的Activity里可以通過如下代碼獲取html頁面?zhèn)鬟^來的參數(shù)

Intent intent = getIntent();
        String action = intent.getAction();
        if(Intent.ACTION_VIEW.equals(action)){
            Uri uri = intent.getData();
            if(uri != null){
                String id = uri.getQueryParameter("id");
                Toast.makeText(this,id,Toast.LENGTH_LONG).show();
            }
        }

但這樣其實有個問題,我們一般會在自己的WebviewActivity里給

wv.setWebViewClient(new WebViewClient(){})

從而實現(xiàn)在本頁內(nèi)的跳轉(zhuǎn)都是由本W(wǎng)ebview打開,而不是跳轉(zhuǎn)到系統(tǒng)瀏覽器處理。這樣設(shè)置后,‘href=”myapp://tonative/param?id=123”’這樣的請求也被攔截到了本W(wǎng)ebview里,從而失效,因此,我們需要做一個判斷

 wv.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                String scheme = Uri.parse(url).getScheme();//還需要判斷host
                if (TextUtils.equals("myapp", scheme)) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                return false;
            }
        });

return true,表明這次請求交給系統(tǒng)來處理。
這樣就可以實現(xiàn)使用隱式啟動,打開需要的Activity。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個用戶交互界面對應一個 ac...
    Rtia閱讀 3,841評論 3 18
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,508評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,024評論 25 708
  • 杏子金黃桃兒肥,麥穗沉甸菜花稀。 農(nóng)家早出晚歸回,至今愁喜百交集。 梔子之花滿園香,唯有蝴蝶獨自賞。 日蒸之苦誰知...
    蒲公英與你的約定閱讀 296評論 0 0
  • 很多時候大概是要把自己放在一個稍微低一點的位置吧,高貴完了內(nèi)心也是會奔潰的(?>?<?) 從來沒有真正覺得自己...
    1531fc61919a閱讀 256評論 0 0