什么是 URL Scheme?

    android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

    URL Scheme应用场景:

    客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如商品详情页、活动详情页等等。也可以执行某些指定动作,如完成支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下几种:

  • 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面

  • H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面

  • APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面

  • APP根据URL跳转到另外一个APP指定页面

    URL Scheme协议格式:

   先来个完整的URL Scheme协议格式:

xl://goods:8888/goodsDetail?goodsId=10011002

通过上面的路径 Scheme、Host、port、path、query全部包含,基本上平时使用路径就是这样子的。

  • xl代表该Scheme 协议名称

  • goods代表Scheme作用于哪个地址域

  • goodsDetail代表Scheme指定的页面

  • goodsId代表传递的参数

  • 8888代表该路径的端口号

    URL Scheme如何使用:

 1.)在AndroidManifest.xml中对标签增加设置Scheme


                android:theme="@style/AppTheme">
            
            
                
                
                
                
                
                
            

        


 2.)获取Scheme跳转的参数


Uri uri = getIntent().getData();if (uri != null) {    // 完整的url信息
    String url = uri.toString();
    Log.e(TAG, "url: " + uri);    // scheme部分
    String scheme = uri.getScheme();
    Log.e(TAG, "scheme: " + scheme);    // host部分
    String host = uri.getHost();
    Log.e(TAG, "host: " + host);    //port部分
    int port = uri.getPort();
    Log.e(TAG, "host: " + port);    // 访问路劲
    String path = uri.getPath();
    Log.e(TAG, "path: " + path);
    List pathSegments = uri.getPathSegments();    // Query部分
    String query = uri.getQuery();
    Log.e(TAG, "query: " + query);    //获取指定参数值
    String goodsId = uri.getQueryParameter("goodsId");
    Log.e(TAG, "goodsId: " + goodsId);
}


3.)调用方式

网页上

打开商品详情

原生调用

  Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
  startActivity(intent);

 4.)如何判断一个Scheme是否有效


PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
List activities = packageManager.queryIntentActivities(intent, 0);boolean isValid = !activities.isEmpty();if (isValid) {
    startActivity(intent);
}


    总结:

   Scheme的基本使用也就这么多了,其他的使用在以后用到的时候再做总结。

    



更多相关文章

  1. Pycharm安装PyQt5的详细教程
  2. cocos2d-x3.2 在Windows下打包Android平台APK
  3. android使用webview上传文件(支持相册和拍照)
  4. ch08 Android(安卓)Intent
  5. android studio 54 下载进度条
  6. ch08 Android(安卓)Intent
  7. android 幕滑动效果
  8. android 文档路径获取
  9. Android(安卓)studio 页面布局无法显示问题

随机推荐

  1. android studio proguard 混淆微信libamm
  2. Android studio 2.3.3+Dlib
  3. Android 安全机制概述 Permission
  4. Android: 向最强看齐, 反编译 植物大战僵
  5. Android(安卓)使用RecycleView制作头像堆
  6. Setting up Automatic NDK Builds in Ecl
  7. Android 经典资料分享大家一起顶
  8. 用Gradle 构建你的android程序
  9. Android(安卓)打开淘宝商品详情
  10. 我的android 第一天-电话拨号器