关于android:Android-中Scheme协议的使用详解

22次阅读

共计 3276 个字符,预计需要花费 9 分钟才能阅读完成。

  1. 什么是 URL Scheme?
    简略的说就是 android 中的一种页面内跳转协定,不便 app 页面的内的跳转

2. 什么时候应用
服务器下发跳转门路,客户端依据 服务器下发跳转门路跳转相应的页面
H5 页面点击描点,依据描点具体跳转门路 APP 端跳转具体的页面
APP 端收到服务器端下发的 PUSH 告诉栏音讯,依据音讯的点击跳转门路跳转相干页面
APP 依据 URL 跳转到另外一个 APP 指定页面
3. 协定格局

zymobi://3g2win:9999/macthDetail?macthId=222&time=10001
复制代码


4. 在 app 中如何应用
在 AndroidManifest.xml 中对 activity 标签减少 intent-filter 设置 Schema

<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>
复制代码

留神:

<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
复制代码

5. 如何调用
1. 在 html 中调用非常简单

<a href="zymobi://3g2win:9999/macthDetail?macthId=222&time=10001"> 关上源生利用指定的页面 </a>
复制代码

2. 在源生利用中调用也很简略

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("zymobi://3g2win:9999/macthDetail?macthId=222&time=10001"));
startActivity(intent); 
复制代码

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

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());
复制代码

输入后果

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
复制代码

具体含意能够比照传入的参数

  1. 判断 Schema 是否无效
    判断 Schema 是否无效,也能够说判断利用是否装置(在确定要启动的利用曾经配置了 scheme)

app 源生判断 Sheme 是否无效

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

最初
如果你感觉此文对你有一丁点帮忙,点个赞。或者能够退出我的开发交换群:1025263163 互相学习,咱们会有业余的技术答疑解惑

如果你感觉这篇文章对你有点用的话,麻烦请给咱们的开源我的项目点点 star:http://github.crmeb.net/u/defu 不胜感激!

残缺源码下载地址:https://market.cloud.tencent….

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

正文完
 0