经常可以看到有些app可以通过网页打开,这是通过自定义scheme来实现的
实现方式:在Activity中设置解析自定义协议
<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</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:host="likui.me"
android:scheme="app" />
</intent-filter>
</activity>
然后创建测试的html代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<a href="app://likui.me?param=test">自定义scheme测试</a>
</body>
</html>
从上面的代码可以看到协议头是自定义的“app”,在测试过程中发现,href中的链接在浏览器输入框里面无法直接打开,只能在html代码中打开。测试代码我已经放到服务器上了,如果需要可以点击打开。
测试结果:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
Uri uri = getIntent().getData();
if (uri != null) {
StringBuilder builder=new StringBuilder();
builder.append("scheme=");
builder.append(uri.getScheme());
builder.append(" host=");
builder.append(uri.getHost());
builder.append(" param=");
builder.append(uri.getQueryParameter("param"));
Log.d("tag",builder.toString());
}
}
log输出内容
D/tag: scheme=app host=likui.me param=test