引用

1、Android业务组件化之URL Scheme使用
2、android 通过schema唤起应用指定页面
3、js 通过schema协议拉起本地app

定义

1、android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。
2、schema也是【隐示启动】中的一种,在data属性下的,其他内容查看Android Intent的隐示启动(启动其他APP界面并传递数据)

使用场景

  • 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面
  • H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面,如果没有的话跳转下载等
  • APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
  • APP根据URL跳转到另外一个APP指定页面
  • 各种二维码扫码跳转

规则

  • schema完整路径:schema://host:port/path/query

    • authority --> host:port
    • query --> queryParameter=queryString
  • 举例:xl://goods:8888/goodsDetail?goodsId=10011002

    • schema=xl
    • host=goods
    • port=8888 (必须是int型哦)
    • authority=goods:8888
    • path=/goodsDetail
    • query=(此处方便看清,稍微隔开一点)goodsId=10011002

截图

schema.png

实例

  • 需要被打开的activity在manifest清单文件中的写法,注意action和category就行了

 

                                                                                                                                                                
  • 被打开的activity中部分内容,主要是为了看schema或者说uri的结构的

 

        if(getIntent() != null){            Uri uri = getIntent().getData();            //完整路径            String url = uri.toString();            //authority            String authority = uri.getAuthority(); //host:port            //schema            String schema = uri.getScheme();            //host            String host = uri.getHost();            //port            int port = uri.getPort();            //path            String path = uri.getPath();            //query            String query = uri.getQuery(); //queryParameter=queryString            //param            String param = uri.getQueryParameter("goodsId");            //最后组装            String finalPath = schema+"://"+host+":"+port+"/"+path+"?"+query;            tv_xxx.setText("由Schema打开的活动画面\n"+                    "url="+url+"\n"+                    "finalPath="+finalPath+"\n");        }
  • 如何使用schema去隐示启动这些activity

方法一:只有:action.VIEW和category.DEFAULT设置的时候

 

    /**     * 只有:action.VIEW和category.DEFAULT设置的时候     * */    private void openSchema1(){        Intent it = new Intent();        it.setAction(Intent.ACTION_VIEW);        it.setData(Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));        startActivity(it);    }

方法二:既有:action.VIEW和category.DEFAULT设置的时候,又有:category.BROWSABLE

 

    /**     * 既有:action.VIEW和category.DEFAULT设置的时候     * 又有:category.BROWSABLE     * */    private void openSchema2(){        webView.loadUrl("xl://goods:8888/goodsDetail?goodsId=10011002");    }

补充:询问有没有activity

 

/**     * 检测某个应用是否安装     *     * @param context     * @param packageName     * @return     */    public static boolean isAppInstalled(Context context, String packageName) {        try {            context.getPackageManager().getPackageInfo(packageName, 0);            return true;        } catch (PackageManager.NameNotFoundException e) {            return false;        }    }    /**     * 检测某个应用是否安装     *     * @param context     * @param intent     * @return     */    public static boolean isAppInstalled(Context context, Intent intent){        List acts = context.getPackageManager().                queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);        return (acts.size() > 0);    }    /**     * 检测某个应用是否安装     *     * @param context     * @param intent     * @return     */    public static boolean isAppInstalled2(Context context, Intent intent){        return (intent.resolveActivity(context.getPackageManager()) != null);    }



作者:Kandy_JS
链接:https://www.jianshu.com/p/53cfb2d87d92
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

更多相关文章

  1. Android:最全面的 Webview 详解
  2. android点滴(29) android中设置用户自定义的字体
  3. Android(安卓)Studio 小技巧(2):AS中Button文字默认大写的问题
  4. android中的Notification使用
  5. 解决windows下eclipse中android项目关联android library project
  6. MAC系统Android(安卓)Studio默认debug签名证书存储路径
  7. Android横竖屏总结全
  8. android资源引用
  9. android与html5的交互——数据库操作,UI操作,以及html5的localStor

随机推荐

  1. Android(安卓)自己收集的开源项目和文章
  2. android jni方法模拟高频按键点击
  3. Android面试题(四)——动画
  4. android setTag的妙用和The key must be
  5. Android(安卓)Camera数据流分析全程记录(o
  6. Material Design: NavigationView Flaotin
  7. Android(安卓)Studio工程导入,仅需三步便
  8. EventBus在Android中的简单使用
  9. 转:android:Adapter用法总结
  10. Android(安卓)Window的添加和显示过程