Android开发---URL Scheme-app协议获取

前言:

我们在使用微信的过程中,经常可以通过别人分享的链接,直接跳转到一些APP内部。比如京东、网易云音乐,我们通过在这两个APP内部分享链接到微信,微信中点击链接进入微信浏览器打开分享的页面,可以在页面中看到直接打开的按钮,点击直接打开就进入了该APP的对应的页面。实际上就是从微信浏览器中的一个页面跳转到APP指定的页面。这一种效果就是通过URL Scheme来实现的。

 
 

URL Scheme

URL Scheme是一种页面内跳转协议,通过定义自己的URL Scheme协议,可以 
从一个APP中打开另外一个APP指定的页面,也可以从H5页面中跳转到APP指定的页面(实际上就是从一个浏览器中的一个页面跳转到APP指定页面)。

URL Scheme协议格式:

一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:

://:/?

scheme可以是常见的协议名 (http、file等)也可以是自定义的协议名(自定义一个字符串即可),一般打开一个APP,大多使用自定义的协议名。

如下就是一个自定义的URL 
caishilive://caishi:8080/loadtooldetail?tool_id=100 
caishilive:即Scheme 该Scheme协议名称 
caishi:即Host,代表Scheme作用于哪个地址域 
8080:即port,代表端口号 
loadtooldetail:即path,代表打开的页面 
tool_id:即query,代表传递的参数

URL Scheme使用 
URL Scheme的使用要先在AndroidManifest.xml中配置能接受Scheme方式启动的activity;

              android:name=".ui.tool.LoadToolDetailActivity"
            android:screenOrientation="portrait">
           
           
               
                                    android:host="caishi"
                    android:path="/loadtooldetail"
                    android:port="8080"
                    android:scheme="caishilive"/>
               
               
               
               
           

       

获取Scheme跳转的参数

 Intent intent = getIntent();
        String scheme = intent.getScheme();
        String dataString = intent.getDataString();
        Uri uri = intent.getData();
        if (uri != null) {
            //完整的url信息
            String url = uri.toString();
            //scheme部分
            String schemes = uri.getScheme();
            //host部分
            String host = uri.getHost();
            //port部分
            int port = uri.getPort();
            //访问路径
            String path = uri.getPath();
            //编码路径
            String path1 = uri.getEncodedPath();
            //query部分
            String queryString = uri.getQuery();
            //获取参数值
            String systemInfo = uri.getQueryParameter("tool_id");
    } 

调用方式:

(1)网页调用

打开APP工具详情页

(2)APP上调用

     Intent action = new Intent(Intent.ACTION_VIEW);
     StringBuilder builder = new StringBuilder();
     builder.append("caishilive://caishi:8080/loadtooldetail?tool_id=100");
     action.setData(Uri.parse(builder.toString()));
     startActivity(action);

当然跳转前要判断一下该URL Scheme是否有效

private boolean schemeValid() {
        PackageManager manager = mContext.getPackageManager();
        Intent action = new Intent(Intent.ACTION_VIEW);
        action.setData(Uri.parse("caishilive://caishi:8080/loadtooldetail?tool_id=100"));
        List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);
        return list != null && list.size() > 0;
    }

以上就是URL Scheme的使用
————————————————

URL Scheme-app协议获取获取方法

下载某app安卓apk安装包并解压得到AndroidManifest.xml文件

下载安卓安装包xml反编译工具AXMLPrinter2.jar

用AXMLPrinter2.jar反编译xxx.xml文件(AndroidManifest.xml)
解压xxx.apk,选择main.xml(也可选择其它xml文件,不过xml文件都是乱码),复制到AXMLPrinter2.jar所在目录,通过cmd

进入到AXMLPrinter2.jar所在目录,使用如下命令,得到的B.txt就是反编译后的文件,现在可以看懂了。

java -jar AXMLPrinter2.jar A.xml > B.txt


A.xml是指需要进行反编译的xml文件名,前面没有加路径,代表与AXMLPrinter2.jar在同一路径下,B.txt代表将反编译出来的文件输出到该文件下。
————————————————
版权声明:本文为CSDN博主「嗜血枫叶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u013396632/article/details/78924349


版权声明:本文为CSDN博主「殇神马」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mq2856992713/article/details/80040286

你可能感兴趣的:(web前端)