Android 通过自定义 scheme 协议来实现 Web 页面启动原生 APP
作者:互联网
目录
应用场景分析
当我们在浏览器中打开某些网页,有时候会发现它有一个功能是可以实现吊起手机中已安装的某个 APP,像我们在浏览器打开 csdn 的一篇博客,或者在浏览器打开知乎的一篇文章时,都会有一个类似去APP阅读的按钮。
这篇文章就来实现这个功能。
实现、效果演示
- 第一步,新建工程
除了默认的 MainActivity 之外,再创建一个 Activity(名字随意,我这里使用 SchemeActivity) 用来被 Web 链接特定跳转。 - 第二步,配置 AndroidManifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--避免桌面没有图标,所以多添加一个 intent-filter-->
<intent-filter>
<data
android:host="myapp.host"
android:pathPrefix="/openwith"
android:scheme="myappscheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity android:name=".SchemeActivity" />
- 第三步,运行程序到手机,并在手机自带浏览器输入如下链接,并搜索即可
myappscheme://myapp.host/openwith
- 第四步,查看效果如下:
实现吊起并打开特定页面
在前面 4 步的基础上我们要是实现这个功能,需要在 MainActivity 中加入如下代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
if (null != intent) {
Uri uri = intent.getData();
if (null != uri) {
Log.e("uri-->", "" + uri.getScheme()
+ "-path->" + uri.getPath()
+ "-params1->" + uri.getQueryParameter("params1"));
if ("schemeAct".equals(uri.getQueryParameter("params1"))) {
Intent intent1 = new Intent(MainActivity.this, SchemeActivity.class);
startActivity(intent1);
}
}
}
}
}
修改我们的访问地址,加上参数,如下:
myappscheme://myapp.host/openwith?params1=schemeAct
效果展示:
这样我们的功能就已经基本 Ok 了。
优缺点说明
- 细心的读者可能注意到了,我在前面提高了使用系统自带的浏览器打开,这是因为有个别浏览器本身不支持,比如:UC,猎豹,对于这种情况,我们没有好的办法。
- 如果我们的功能是通过分享到微信,然后在微信中打开 Web 链接,这个时候我们的功能是会失效的,因为微信自己的内嵌浏览器是有白名单限制的。
- 大多数浏览器都是支持的,代码量很少,也可以节约开发成本。
总结
- 前面的清单文件注册,需要放到默认启动的 Activity 下,这一点很多博客没有提及到。
- 点击后如果手机没有安装对应的 APP,那么这个判断和后面的逻辑是在网页端处理的。
标签:params1,Web,浏览器,自定义,APP,uri,MainActivity,打开 来源: https://blog.csdn.net/wufeng55/article/details/88089638