引用

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);    }

真的要过年啦~~~~~

更多相关文章

  1. android webview 软键盘覆盖 输入框的 问题
  2. Unity自动打包工具——Mac上打包android
  3. android (java) 网络发送get/post请求参数设置
  4. 6个必看的Android网站
  5. Android(安卓)TextView文字横向自动滚动(跑马灯)
  6. Android利用Fiddler进行网络数据抓包
  7. android属性动画
  8. Android设置启动界面
  9. Android的selector背景选择器

随机推荐

  1. 如何下载并编译Android(安卓)4.0内核源码
  2. AndroVM 可以让你在虚拟机环境中运行 And
  3. 微信头像圣诞帽来啦,分享给 TA 戴帽子吧
  4. Develop--Training(七)Getting Started--
  5. 酷炫轮播广告
  6. 使用MySQL和Servlet编写Android接口样例
  7. 【PaddlePaddle】测试Paddle-Lite mobile
  8. debug安装包无效的解决办法
  9. To fetch EDID from android device
  10. android之listView定位到指定行同时隐藏