通過Uri跳轉Activity(當然對於WebView中的網頁同樣適用)

在上班的第二個星期,項目老大,叫我做一個從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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章