Android 通过scheme链接打开本地应用

前言:最近做一个在桌面添加快捷方式的功能,用普通常规的添加快捷方式大多数手机都创建不出来, 尤其是像小米这种只有一层的桌面,因此采取了apk式快捷方式,顾名思义就是在桌面安装一个apk来做为快捷方式, 当点击快捷方式(apk)的时候直接打开主应用的相应界面。

1、方式一,用Intent来启动主应用对应界面,设置包名以及要打开的界面的全路径,还要在配置文件中设置此界面exported=true:

Intent intent = new Intent(); 
ComponentName cn = new ComponentName(packageName, className);             
intent.setComponent(cn); 
startActivity(intent); 

通过这种方式打开应用经测试在大多数手机上没问题,但是在三星手机上点击快捷方式启动应用后,再点返回键退出应用,这时候应用会自动重启,结束不掉。

2、方式二, 用scheme打开

可以在你想要打开的应用的Activity中加scheme和host,scheme和host都可以自己取值,当然host不是必须要的,但scheme是必须要的,指定好了以后,就有了这么一个路径:scheme://host?key1=参数1&key2=参数2    ,我们就可以通过这个路径来启动应用了,一般只启动LauncherActivity, 然后通过LauncherActivity往其他页面中转。

那么我们的快捷方式的MainActivity就可以这么写了:

if (!PackageUtils.isInstall(context, "packageName")) {
    // 判断是否安装主应用, 如果没安装快捷方式会进入主页,提示用户下载
    return;
}

Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse("warehouse://?where_shotcut=" + BuildConfig.ShortCutName));
context.startActivity(it);
((Activity) context).finish(); // 跳转过去后立刻自杀, 让网仓3号起来

上面代码的含义是:首先判断是否安装了主应用, 如果没安装则进入快捷方式的主页,快捷方式的主页是一个下载链接,提示用户下载主应用, 如果安装了则会走到下面三句代码打开主应用的目标界面, 注意我在代码中没有使用host,通过:"scheme://?key=参数" 这种形式来打开主应用。

3、用webview打开应用

在上面第二点中讲到,设置scheme和host后会产生一个链接:scheme://host?key1=参数1&key2=参数2

这时候我们在快捷方式主页可以放一个webview, 直接用webview来打开应用:

webview.loadUrl("scheme://host?key1=参数1&key2=参数2");

经测试第二点和第三点完美打开应用,都不会有问题,我还反编译了支付宝“一步支付宝付款”的apk式快捷方式,它使用的就是第三种方式。

4、打开主应用以后,那么主应用如何解析scheme并且如何拿到参数中的数据呢:

        Intent intent = getIntent();
        String scheme = intent.getScheme();
        Uri uri = intent.getData();
        System.out.println("scheme:"+scheme);
        if (uri != null) {
            String host = uri.getHost();
            String dataString = intent.getDataString();
            //获得参数值
            String key1 = uri.getQueryParameter("key1");

            String key2 = uri.getQueryParameter("key2");
         }  

猜你喜欢

转载自blog.csdn.net/helloworld19870427/article/details/84554707
今日推荐