利用系統(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。