URL Scheme 介绍
URL Scheme是一种页面内跳转协议,通过定义自己的URL Scheme协议,可以
从一个APP中打开另外一个APP指定的页面,也可以从H5页面中跳转到APP指定的页面(实际上就是从一个浏览器中的一个页面跳转到APP指定页面)。
URL Scheme协议格式
一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:
<scheme>://<host>:<port>/<path>?<query>
实例
schemeService://Host:8080/path?id=true
- schemeService:即Scheme 该Scheme协议名称
- Host:即Host,代表Scheme作用于哪个地址域
- 8080:即port,代表端口号
- path:即path,代表打开的页面
- id:代表传递的参数
安卓端配置
AndroidManifest
<!--需要打开的activity-->
<activity
android:name=".ui.tool.LoadToolDetailActivity"
android:screenOrientation="portrait">
<!--要想在别的App上能成功调起App,必须添加intent过滤器-->
<intent-filter>
<!--协议部分,随便设置-->
<data
android:host="Host"
android:path="/path"
android:port="8080"
android:scheme="schemeService"/>
<!--下面这几行也必须得设置-->
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
Activity
Intent intent = getIntent();
String scheme = intent.getScheme();
String dataString = intent.getDataString();
Uri uri = intent.getData();
if (uri != null) {
//完整的url信息
String url = uri.toString();
//scheme部分
String schemes = uri.getScheme();
//host部分
String host = uri.getHost();
//port部分
int port = uri.getPort();
//访问路径
String path = uri.getPath();
//编码路径
String path1 = uri.getEncodedPath();
//query部分
String queryString = uri.getQuery();
//获取参数值
String systemInfo = uri.getQueryParameter("tool_id");
}
调用
网页
<a href="schemeService://Host:8080/path?id=true">打开App传入指定参数</a>
安卓
先检查一下是否有效
private boolean schemeValid() {
PackageManager manager = mContext.getPackageManager();
Intent action = new Intent(Intent.ACTION_VIEW);
action.setData(Uri.parse("caishilive://caishi:8080/loadtooldetail?tool_id=100"));
List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);
return list != null && list.size() > 0;
}
跳转
Intent action = new Intent(Intent.ACTION_VIEW);
StringBuilder builder = new StringBuilder();
builder.append("schemeService://Host:8080/path?id=true");
action.setData(Uri.parse(builder.toString()));
startActivity(action);