在上班的第二个星期,项目老大,叫我做一个从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);
}