精华内容
下载资源
问答
  • Windows注册自定义URL协议
    千次阅读
    2019-08-29 11:03:14

    原理:
    在注册表HKEY_CLASSES_ROOT项下加入对应的子项,内容如下:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\test]
    @="URL:test protocol"
    "URL Protocol"=""
    
    [HKEY_CLASSES_ROOT\test\DefaultIcon]
    @="mytest.exe"
    
    [HKEY_CLASSES_ROOT\test\Shell]
    
    [HKEY_CLASSES_ROOT\test\Shell\Open]
    
    [HKEY_CLASSES_ROOT\test\Shell\Open\Command]
    @="\"D:\\sourcecode\\mytest.exe\" -- \"%1\""
    

    在浏览器中输入test://start/123就会打开D:\\sourcecode\\mytest.exe,并且传入命令行参数test://start/123

    更多相关内容
  • 什么是 URL Scheme? android中的scheme是一种页面内... 客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特

    什么是 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]:[8000][path]?[query]

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

    • xl代表该Scheme 协议名称
    • goods代表Scheme作用于哪个地址域
    • goodsDetail代表Scheme指定的页面
    • goodsId代表传递的参数
    • 8888代表该路径的端口号

    URL Scheme如何使用:

    定义一个Schema

    • 在AndroidManifest.xml中对<activity />标签增加<intent-filter />设置Scheme
    <activity
                android:name=".GoodsDetailActivity"
                android:theme="@style/AppTheme">
                <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
                <intent-filter>
                    <!--协议部分,随便设置-->
                    <data android:scheme="xl" 
                              android:host="goods" 
                              android:path="/goodsDetail" 
                              android:port="8888"/>
                    <!--下面这几行也必须得设置-->
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.BROWSABLE"/>
                </intent-filter>
            </activity>
    
    • 获取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<String> pathSegments = uri.getPathSegments();
        // Query部分
        String query = uri.getQuery();
        Log.e(TAG, "query: " + query);
        //获取指定参数值
        String goodsId = uri.getQueryParameter("goodsId");
        Log.e(TAG, "goodsId: " + goodsId);
    }
    
    • 调用方式
    网页上
    <a href="xl://goods:8888/goodsDetail?goodsId=10011002">打开商品详情</a>
    
    原生调用
    Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
    startActivity(intent);
    

    如何判断一个Scheme是否有效

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

     

    展开全文
  • 自己没做过这样的需求,在网上查找,使用Url Scheme协议实现浏览器跳转app指定页面,网上的例子很多,但是都比较简单,例子也很简单,但是放在项目里面就出现了各种问题,因为只是单纯的一个例子,没有考虑各种情况...

    首先要吐槽一下,这个问题已经困扰好几天了!自己没做过这样的需求,在网上查找,使用Url Scheme协议实现浏览器跳转app指定页面,网上的例子很多,但是都比较简单,例子也很简单,但是放在项目里面就出现了各种问题,因为只是单纯的一个例子,没有考虑各种情况和问题,后来终于看到了一篇文章,写的算是比较详细的了,感兴趣的可以看一看,我看到这位博主写的文章确实很不错:

    博客地址:

    Android 外部唤起应用跳转指定页面

    https://www.jianshu.com/p/1439c8bbc34b

    实现的基本需求如下:

    在微信里面打开app的指定页面,考虑到使用Url Scheme,微信好像已经禁止了,但是通过浏览器可以实现,最终是在微信里面让用户通过打开浏览器,使用Url Schme实现在浏览器中打开app指定页面,通过传递不同的参数实现跳转不同的页面

    启动页A 主页面B 跳转页面C

    我实现的是在主页面B接收跳转页面的参数,从而进行跳转页面C,因为我还有一个启动页A,基本操作是这样的

    1.在Manifest.xml中

    <activity
        android:name=".SplachActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait"
        android:launchMode="singleTask"
        >
        <!--通过浏览器Url启动app-->
        <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="自己定义"
                android:host="自己定义"
                />
            <!--<a href="[scheme]://[host]/[path]?[query]">启动应用程序</a>-->
        </intent-filter>
    </activity>
    Url Scheme协议的定义以及使用可以自己去搜索使用的方式,就不在说了,网上说的已经有很多了,这里要注意的是启动页是SplachActivity,但是接收浏览器参数跳转是在MainActivity,我看到网上大部分写的例子都是启动和接收参数都是在一个Activity里面,同时还要注意在MainActivity里面设置的一个参数android:launchMode="singleTask" 这个模式是保证在整个应用中只有这一个MainActivity,设置了这个模式,才发现后面遇到的都是坑!


    在进行第二步操作之前,希望还是先阅读以下这篇文章,如果没看到这篇文章,估计遇到的坑还没有填上

    博客地址:

    当Activity的launchMode设为singleTask的时候,你要注意了!

    http://blog.csdn.net/caiwenfeng_for_23/article/details/46918743

    感谢两位博主的文章,也是看到了他们写的文章之后自己才有了思路,解决了问题!弄的自己都头疼了!
    接下来就是第二步
    2.在MainActivity接收浏览器的指定跳转页面

    跳转方法
    //根据拦截的url跳转页面
    private void startIntent(Intent intentUrl)
    {
        ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); activityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_WITH_HOME);
        //在浏览器获取到需要制定打开app的某个页面
        if (intentUrl.getScheme() != null) {
            LoggerUtil.i("Alex", "mIntent.getScheme()-->" + intentUrl.getScheme().toString());
            String action = intentUrl.getAction();
            if (Intent.ACTION_VIEW.equals(action)) {
                Uri uri = intentUrl.getData();
                Log.i("Alex", "uri--:" + uri.toString());
                if (uri != null) {
                    String host = uri.getHost();
                    String dataString = intentUrl.getDataString();
                    String bookId = uri.getQueryParameter("bookId");
                    String path = uri.getPath();
                    String queryString = uri.getQuery();
                    LoggerUtil.i("Alex", "host:" + host);
                    LoggerUtil.i("Alex", "dataString:" + dataString);
                    LoggerUtil.i("Alex", "id:" + bookId);
                    LoggerUtil.i("Alex", "path:" + path);
                    LoggerUtil.i("Alex", "queryString:" + queryString);
                    
                    if(path.contains("records_list.jhtml"))
                    {
                        rb1.setChecked(true);
                        Intent resultExercise=new Intent(MainActivity.this,HomeExerciseActivity.class);
                        startNewActivity(resultExercise);
                    }
                    
                    else if(path.contains("task.jhtml"))
                    {
                        rb1.setChecked(true);
                        Intent resultTask=new Intent(MainActivity.this,HomeTaskActivity.class);
                        startNewActivity(resultTask);
    
                    }
                   
                    else if(path.contains("score_list.jhtml"))
                    {
                        rb4.setChecked(true);
                        Intent resultCourseDetails=new Intent(MainActivity.this,CourseDetailsActivity.class);
                        resultCourseDetails.putExtra("bookId", Integer.parseInt(bookId));
                        startNewActivity(resultCourseDetails);
                    }
                }
            }
        }
    }
    private void startNewActivity(Intent resultIntent)
    {
        if (ViewUtils.isLaunchedActivity(this, MainActivity.class)) {
            resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(resultIntent);
            LoggerUtil.i("Alex","创建new task-->"+getTaskId());
        } else {
            TaskStackBuilder.create(this)
                    .addParentStack(resultIntent.getComponent())
                    .addNextIntent(resultIntent)
                    .startActivities();
            LoggerUtil.i("Alex","当前未打开,重新打开-->"+getTaskId());
        }
    }

    在MainActivity的onCreate()和onNewIntnet()方法中加入该方法

    在onCreate()方法中加入 startIntent(getIntent());
    在onNewIntent()方法中也加入
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        LoggerUtil.i("Alex","onNewIntent启动");
        startIntent(intent);
    }

    注意:

    第一.如果你在上面看到了我说的当Activity的launchMode设为singleTask的时候,你要注意了!这篇博客,你就明白了为什么要在onCreate和onNewIntent方法里面都要加入该方法

    第二.startIntent(getIntent())该方法传入一个Intent intent参数,不可少!在onCreate和onIntnet里面都要传入Intent参数,这个问题在上面的博客中就能看到,当初因为粗心就没有传入,导致数据一直不是最新的,还是旧的,就是这个原因!

    3.在你要跳转的页面C,在Manifest.xml可以设置

    <activity
        android:name=".HomeExerciseActivity"
        android:screenOrientation="portrait"
        android:launchMode="singleTop"
        >
    
    android:launchMode="singleTop" 是为了避免当你要打开的页面已经打开,再次打开的时候不需要在栈里面创建一个新的了,
    
    
    感觉网上说的都挺简单的,但是实际做的时候需要考虑的问题还挺多的,自己看到的说的详细的也比较少,走了不少弯路,困扰了好几天,现在记录一下,以后遇到这样的问题也好知道该怎么办了。再次感谢两位博主写的,基本把自己的问题解决了。


    展开全文
  • android schema跳转协议

    千次阅读 2018-08-29 09:21:13
    什么是 URL Scheme?  android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;... 客户端应用可以向操作系统注册一个 URL s...

    什么是 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代表该路径的端口号

    scheme结构可参考文章:https://blog.csdn.net/harvic880925/article/details/44679239

    URL Scheme调用方式:

             

    网页上

    <a href="xl://goods:8888/goodsDetail?goodsId=10011002">打开商品详情</a>

    原生调用

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

     

    参考文章:https://blog.csdn.net/qq_23547831/article/details/51685310

    展开全文
  • 目前的浏览器中,自定义schemed的有UC,还有FireFox。大部分的浏览器没做这个点,因为这个点实际使用的时候确实意义不大。 原生的android 浏览器要做自定义sheme,要处理2个问题,一个就是在url的地址栏中输入类似:...
  • 1、Scheme的作用,浏览器唤起APP。 2、遇到的不生效问题原因及解决办法。
  • Android的Schema

    万次阅读 2017-04-11 16:00:48
    什么是 URL Schema?   android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个...
  • 微信里屏蔽了 schema 协议,如果在微信中打开h5,则会提示用户在浏览器中打开。<!doctype html> <html> <head> <title></title> <meta charset="utf-8"> <meta content="width=...
  • 第二章:xml、http协议、tomacat XML XML概述 什么是xml:英文Extensible MarkUp Language,可扩展的标记语言。 ​ 可扩展的标记语言:在xml里面的标记是可以扩展的。 ​ 版本: 1.0和1.1 xml的用途:用来存储数据 ...
  • dubbo多协议和多注册中心

    千次阅读 2018-09-07 21:12:25
    一、配置dubbo多协议模式 1、默认协议  Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的...
  • electron注册协议, electron会将协议注册到系统的协议列表中,它是系统层级的API,只能在当前系统下使用, 其他未注册协议的电脑不能识别。 Electron的app模块提供了一些处理协议的方法, 这些方.
  • 一、配置dubbo多协议模式 1、默认协议  Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的...
  • XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB .NET 或C#)来构造一个...
  • 浏览器打开应用指定的界面

    千次阅读 2016-07-25 18:23:01
    iOS中提供了两种在浏览器中打开APP的方法: Smart App Banner 和schema协议,这里介绍schema的使用
  • 一、配置dubbo多协议模式  dubbo支持多种连接协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。配置如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
  • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。我们只要实现Servlet接口,复写其中的方法即可。 2. Servlet简单案例入门: 实现步骤: 创建JavaEE项目 定义一个类,实现Servlet接口 public...
  • 通过scheme协议打开app 一、url scheme协议格式: 二、 配置步骤: 1、参照如下配置注册DemoActivity 2、通过scheme协议打开app 3、DemoActivity接收参数: 4、附录:action 和 category类别 扩展、h5页面通过scheme...
  • 浏览器判断是否安装APP

    万次阅读 2016-08-01 16:47:43
    前段时间遇到一个小需求:要求在分享出来的...我们最开始就面临2个问题:一是如何唤起本地app,二是如何判断浏览器是否安装了对应app。 如何唤起本地app 首先,想要实现这个需求,肯定是必须要客户端同学的配合才行,
  • 如果你的App想要在手机系统中注册一个scheme协议,方便其他App调用你的App,那么可以根据本文设置。设置UrlSchemes打开项目的manifest.json文件,切换到“代码视图”5+App项目在manifest.json文件的"plus"->...
  • 微信公众号“智物客”和您免费分享物联网、智慧城市相关技术和项目解决方案。本文从物联网体系各层协议入手,重点分析了物联网体系常用的通讯协议,在下半部分,笔者将分享物联网体系的通信协议
  • 浏览器点击链接打开指定APP详解

    千次阅读 2019-07-15 19:46:24
    android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化...
  • Dubbo源码学习--协议Protocol(一)

    千次阅读 2018-04-13 20:12:40
    1、默认协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,...
  • 当我们在浏览器中打开某些网页,有时候会发现它有一个功能是可以实现吊起手机中已安装的某个 APP,像我们在浏览器打开 csdn 的一篇博客,或者在浏览器打开知乎的一篇文章时,都会有一个类似去APP阅读的按钮。...
  • 分布式通信协议-http(分布式笔记)

    千次阅读 2019-05-23 12:50:48
    HTTP协议概述 1、客户端和服务器端 2、URI和URL URI:web服务器资源的名字。 index.html URL:http://www.gupaoedu.com:80/java/index.html[?query-string] #location URL的组成: schema: http/https/ftp. host: ...
  • 运用scheme协议唤起外部app

    千次阅读 2019-07-11 20:32:48
    首先,需要指出的是在客户端开发中,scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定...
  • android as呼起APP协议

    千次阅读 2017-12-11 11:21:58
    作用客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如车辆详情页、订单详情页、消息通知页、促
  • Onvif协议:什么是Onvif

    万次阅读 2020-10-23 11:52:31
    PU设备上线后,向CMU注册,建立连接 CMU与PU进行信令交互,请求能力集,获取配置 CU上线,向CMU注册,建立连接 CMU与CU进行信令交互,传输设备列表 CU向PU请求码流 右图: PU设备上线后,向CMU发送HELLO消息 CMU需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,649
精华内容 4,659
关键字:

浏览器 注册schema协议