前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 中Scheme协议的使用详解

Android 中Scheme协议的使用详解

原创
作者头像
PHP开发工程师
发布2022-03-31 10:28:26
发布2022-03-31 10:28:26
3.5K00
代码可运行
举报
文章被收录于专栏:thinkphp+vuethinkphp+vue
运行总次数:0
代码可运行

1. 什么是URL Scheme?

简单的说就是android中的一种页面内跳转协议,方便app页面的内的跳转

2.什么时候使用

  1. 服务器下发跳转路径,客户端根据 服务器下发跳转路径跳转相应的页面
  2. H5页面点击描点,根据描点具体跳转路径APP端跳转具体的页面
  3. APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
  4. APP根据URL跳转到另外一个APP指定页面

3.协议格式

代码语言:javascript
代码运行次数:0
运行
复制
zymobi://3g2win:9999/macthDetail?macthId=222&time=10001
复制代码

scheme

代表该Schema 协议名称

zymobi

host

代表Schema作用于哪个地址域

3g2win

port

代表该路径的端口号

9999

path

代表Schema指定的页面

/macthDetail

--

代表传递的参数

?macthId=222&time=10001

4.在app中如何使用

在AndroidManifest.xml中对activity标签增加intent-filter设置Schema

代码语言:javascript
代码运行次数:0
运行
复制
 <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="zymobi"
                    android:host="3g2win"
                    android:port="9999"
                    android:path="/macthDetail"
                    />

            </intent-filter>

        </activity>
复制代码

注意:

代码语言:javascript
代码运行次数:0
运行
复制
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
复制代码

5.如何调用

1.在html中调用非常简单

代码语言:javascript
代码运行次数:0
运行
复制
<a href="zymobi://3g2win:9999/macthDetail?macthId=222&time=10001">打开源生应用指定的页面</a>
复制代码

2.在源生应用中调用也很简单

代码语言:javascript
代码运行次数:0
运行
复制
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("zymobi://3g2win:9999/macthDetail?macthId=222&time=10001"));
startActivity(intent); 
复制代码

6.在源生界面获取uri和各个参数

代码语言:javascript
代码运行次数:0
运行
复制
 Intent intent = getIntent();
        Uri data = intent.getData();  //
        String action = intent.getAction();
        String scheme = intent.getScheme();
        Set<String> categories = intent.getCategories();
        Log.e("TAG", "data==========="+data);
        Log.e("TAG", "action==========="+action);
        Log.e("TAG", "categories==========="+categories);
        Log.e("TAG", "DataString==========="+intent.getDataString());
        Log.e("TAG", "==============================");
        Log.e("TAG", "scheme==========="+scheme);
        Log.e("TAG", "id ==========="+data.getQueryParameterNames());
        Log.e("TAG", "host==========="+data.getHost());
        Log.e("TAG", "path==========="+data.getPath());
        Log.e("TAG", "port==========="+data.getPort());
复制代码

输出结果

代码语言:javascript
代码运行次数:0
运行
复制
4-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: data===========zymobi://3g2win:9999/macthDetail?goodsId=10011002&time=1111
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: action===========android.intent.action.VIEW
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: categories===========null
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: DataString===========zymobi://3g2win:9999/macthDetail?goodsId=10011002&time=1111
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: ==============================
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: scheme===========zymobi
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: id ===========[goodsId, time]
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: host===========3g2win
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: path===========/macthDetail
04-11 18:13:56.335 5198-5198/com.phone.myapplication E/TAG: port===========9999
复制代码

具体含义可以对比传入的参数

7. 判断Schema是否有效

判断Schema是否有效,也可以说判断应用是否安装(在确定要启动的应用已经配置了scheme)

app源生判断Sheme是否有效

代码语言:javascript
代码运行次数:0
运行
复制
Intent intent = newIntent(Intent.ACTION_VIEW, Uri.parse("zymobi://3g2win:9999/macthDetail?macthId=222&time=10001"));

List<ResolveInfo> activities =packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
Toast.makeText(this,isValid+"",Toast.LENGTH_LONG).show();

最后

完整源码下载地址:https://market.cloud.tencent.com/products/33276

PHP学习手册:https://doc.crmeb.com 技术交流论坛:https://q.crmeb.com

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是URL Scheme?
  • 2.什么时候使用
  • 3.协议格式
  • 4.在app中如何使用
  • 5.如何调用
  • 6.在源生界面获取uri和各个参数
  • 7. 判断Schema是否有效
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档