Android中的Scheme是一种页面跳转协议,和网站通过URL的形式访问一样,APP同样可以通过这种方式进行跳转,它可以很方便的满足我们在一些场景中的需求:
假若遇到一个这个需求,h5想跳转到app的页面里面,有两种解决方案,一种就是原生app做一个JavascriptInterface的接口提供给js调用。
另一种就可以通过Scheme协议跳转,不需要去调java的接口。
具体用法:
在清单文件当中设置scheme
<activity
android:name=".xxx.xxxActivity"
android:exported="true">
<intent-filter>
<data
android:host="ddd"
android:path="/abc"
android:port="123"
android:scheme="home" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
scheme:协议(不要填大写,不然h5调不起)
host:地址
port:端口号
path:路径
定义一个这样的协议。地址,端口号,路径,不填也可以,只需要一个scheme就行。
path一定要有/
webview用法
写一个html页面,在点击事件里面写入这个协议
<!DOCTYPE html>
<html>
<body>
<!-- href里面直接放协议地址 -->
<a id="dianji" href='home://ddd:123/abc?params=100&age=26'>点击这里</a>
</body>
</html>
?后面跟http一样,可以放参数,用&来添加后续参数
新建一个文件,把上面的html放进去,更改后缀为html
新建一个assets文件夹,放入这个html
新建一个Activity,布局文件里面写一个WebView控件,直接加载这个html
webView.loadUrl("file:///android_asset/web/index.html")
这时候就可以直接跳转到你配置scheme的那个Activity了
Activity获取参数值
在onCreate中通过intent获取参数
原生app用法
val url = "home://ddd:123/abc?params=100&age=26"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)