在工作中用到了H5界面调用native的activity,当时想到了两种方法,第一种方式是通过scheme的方式实现,第二种方式是通过拦截webview的url让后进行重定向的方式来实现,下面就讲解一下具体是怎样实现的,希望可以帮助需要的同学。
第一种方式使用Scheme方式调起native的activity
通过使用Scheme,可以实现用手机的浏览器(内置或第三方)访问一个网页,启动自己的应用,或者在一个应用使用WebView.loadUrl()方法启动另外一个应用
实现原理:
对Android平台而言,URI主要分为四部分 scheme, authority,path, queryString。其中authority又分为host和port。格式如下:
scheme://host:port/path?qureyParameter=queryString
举个例子:
http://www.orangecpp.com:80/tucao?id=hello
在android的Manifest配置文件中,配置项中有配置,其中包含内容有:
<data android:host="" android:mimeType="" android:path="" android:pathPattern="" android:pathPrefix="" android:port="" android:scheme="" android:ssp="" android:sspPattern="" android:sspPrefix=""/>
通过配置可以对网页进行过滤,符合匹配条件的网页才跳转到应用。一般只需要设置host和scheme即可。
实现步骤
下面介绍一下具体的实现步骤
1、在工程的asset下面建立test.html
<html> <body> <h1>Test Scheme</h1> <!--手动点击跳转--> <a href="myscheme://www.test.com:80/mypath?key=mykey">Click</a> </body> </html>
2、创建一个Android测试工程,修改Manifest文件,给想要接收跳转的Activity添加配置
<activity android:name=".SecondActivity"> <!--需要添加下面的intent-filter配置--> <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:scheme="myscheme" /> </intent-filter> </activity>
3、在配置好的Activity里即可获取外部跳转的参数信息。
WebView webView = (WebView) getActivity().findViewById(R.id.webview); webView.loadUrl("file:///android_asset/h/test.html");
这样就可以调起native的activity了。
第二种方式通过webView拦截重新定向调起activity
整个过程是在webView中实现的
1、覆写webView的 boolean shouldOverrideUrlLoading(WebView view, String url)方法
2、在这个方法中进行具体的操作
public boolean shouldOverrideUrlLoading(WebView view, String url) { try { DebugLog.i(TAG, "shouldOverrideUrlLoading = " + url); Uri uriData = Uri.parse(url); //将拦截的url转换成uri String scheme = uriData.getScheme();// 获得uri的scheme if (“商定的scheme”.equals(scheme)) { // 如果这个scheme是native和H5之前商定的就跳转 // 跳转到制定的activity中 } else { // 如果不是继续在H5中执行 view.loadUrl(url); } }catch (Exception e){ e.printStackTrace(); } return true; }
这样就可以了