在上班的第二個星期,項目老大,叫我做一個從WebView中的網頁跳轉到一個新的Activity,當時一臉懵逼,當然只有度娘和google了,在度娘上找到了答案,其實也是非常簡單的,我們在平時都是用Intent去跳轉,但是竟然沒有留意,Intent中可以傳遞uri進行跳轉,下面講述一個實例:進行展示:
第一步:在AndroidManifest.xml中找到你要跳轉的Activity,在該Activity添加過濾器如下圖:
在此data便籤,便是url的配置了。一定要注意path這個參數,一定要先/在跟路徑。
wr://com.app.wr:8888/app?id=1001此url是一個完整的url
wr:代表的是scheme 協議名稱 //在此注意爲了從A頁面直接跳轉到B頁面,不要使用網路協議,不然,在跳轉是會讓用戶,選擇是跳轉那個頁面。
goods:代表的是host 代表scheme的那個作用域
/goodsDetail:代表的是path 指定那個頁面
8888:代表的port 端口號
id:代表的query 代表傳遞的參數
在此第一步的配置就完成了
第二步:那就是A頁面跳轉到B頁面了,在此有兩種方式進行跳轉(原生跳轉和webView的網頁跳轉),先介紹第一種方式:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("wr://com.app.wr:8888/app?id=1001")));
這就完成了原生跳轉,如果你要跳轉的Activity不需要參數,那在地址中也不用要參數了。我這邊只傳遞了一個id值過去
所運行的截圖
第二種方法:在WebView中去跳轉
private String mLoadData = "<html>\n" +
"\n" +
"<head>\n" +
"<title>正在加載數據...</title>\n" +
"\n" +
"</html>";
private String mData = "<html>\n" +
"\n" +
"<head>\n" +
"<title>我的第一個 HTML 頁面</title>\n" +
"</head>\n" +
"\n" +
"<body>\n" +
"<p>body 元素的內容會顯示在瀏覽器中。</p>\n" +
"<p>title 元素的內容會顯示在瀏覽器的標題欄中。</p>\n" +
"\n" +
"<a href=\"wr://com.app.wr:8888/app?id=1001\">打開商品詳情</a>\n" +
"</body>\n" +
"\n" +
"</html>";
讓webView加載上面這個html。就可以跳轉了,在此不進行截圖了,下面介紹如何在B頁面中獲取uri中傳遞的參數
B頁面中獲取uri中傳遞的參數:
Uri uri = getIntent().getData();
uri中有很多獲取參數的方法
String id = uri.getQueryParameter("id")
就成功的獲取了參數,當然還有一些方法進行獲取
如何判斷一個Scheme是否有效
PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("wr://com.app.wr:8888/app?id=1001"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
startActivity(intent);
}