Android Scheme URL 使用方法

URL Scheme 介绍

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

URL Scheme协议格式

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

<scheme>://<host>:<port>/<path>?<query>

实例

schemeService://Host:8080/path?id=true

  • schemeService:即Scheme 该Scheme协议名称
  • Host:即Host,代表Scheme作用于哪个地址域
  • 8080:即port,代表端口号
  • path:即path,代表打开的页面
  • id:代表传递的参数

安卓端配置

AndroidManifest

    <!--需要打开的activity-->
  <activity
            android:name=".ui.tool.LoadToolDetailActivity"
            android:screenOrientation="portrait">
            <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
            <intent-filter>
                <!--协议部分,随便设置-->
                <data
                    android:host="Host"
                    android:path="/path"
                    android:port="8080"
                    android:scheme="schemeService"/>
                <!--下面这几行也必须得设置-->
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>

Activity

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

调用

网页

<a href="schemeService://Host:8080/path?id=true">打开App传入指定参数</a>

安卓

先检查一下是否有效

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

跳转

     Intent action = new Intent(Intent.ACTION_VIEW);
     StringBuilder builder = new StringBuilder();
     builder.append("schemeService://Host:8080/path?id=true");
     action.setData(Uri.parse(builder.toString()));
     startActivity(action);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。