-
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
更多相关内容 -
Scheme协议【浏览器唤醒APP】
2021-04-21 13:32:52什么是 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); }
-
安卓学习笔记---使用浏览器打开app指定协议(Url Scheme)
2017-12-28 15:26:12自己没做过这样的需求,在网上查找,使用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
-
Android 浏览器自定义scheme:market://协议
2013-09-09 20:24:49目前的浏览器中,自定义schemed的有UC,还有FireFox。大部分的浏览器没做这个点,因为这个点实际使用的时候确实意义不大。 原生的android 浏览器要做自定义sheme,要处理2个问题,一个就是在url的地址栏中输入类似:... -
Android配置Scheme使用浏览器唤起APP的方式,以及不生效问题解决
2020-05-30 16:42:181、Scheme的作用,浏览器唤起APP。 2、遇到的不生效问题原因及解决办法。 -
Android的Schema
2017-04-11 16:00:48什么是 URL Schema? android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个... -
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020-11-20 14:30:49微信里屏蔽了 schema 协议,如果在微信中打开h5,则会提示用户在浏览器中打开。<!doctype html> <html> <head> <title></title> <meta charset="utf-8"> <meta content="width=... -
XML、DTD约束、Schema约束、HTTP协议
2021-03-28 17:52:16第二章: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 Playground 系列】自定义协议篇
2020-12-10 10:43:30electron注册的协议, electron会将协议注册到系统的协议列表中,它是系统层级的API,只能在当前系统下使用, 其他未注册协议的电脑不能识别。 Electron的app模块提供了一些处理协议的方法, 这些方. -
Dubbo多协议和多注册中心
2016-09-07 19:50:22一、配置dubbo多协议模式 1、默认协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的... -
常见通信协议与通讯协议梳理- 通讯协议
2019-08-25 11:47:37XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB .NET 或C#)来构造一个... -
浏览器打开应用指定的界面
2016-07-25 18:23:01iOS中提供了两种在浏览器中打开APP的方法: Smart App Banner 和schema协议,这里介绍schema的使用 -
dubbo 学习(5) dubbo多协议和多注册中心
2015-10-30 00:06:18一、配置dubbo多协议模式 dubbo支持多种连接协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。配置如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=... -
五、JavaWeb基础(servlet、http协议、request和response请求详解、ServletContext对象)
2021-09-24 19:40:49Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。我们只要实现Servlet接口,复写其中的方法即可。 2. Servlet简单案例入门: 实现步骤: 创建JavaEE项目 定义一个类,实现Servlet接口 public... -
Android - 集成华为推送之scheme协议跳转
2020-12-18 16:47:45通过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 首先,想要实现这个需求,肯定是必须要客户端同学的配合才行, -
Android平台设置UrlSchemes,实现被第三方应用调用
2021-05-26 10:41:14如果你的App想要在手机系统中注册一个scheme协议,方便其他App调用你的App,那么可以根据本文设置。设置UrlSchemes打开项目的manifest.json文件,切换到“代码视图”5+App项目在manifest.json文件的"plus"->... -
基础技术篇 9 ——物联网常见通信协议与通讯协议梳理【上】- 通讯协议
2017-07-17 01:36:09微信公众号“智物客”和您免费分享物联网、智慧城市相关技术和项目解决方案。本文从物联网体系各层协议入手,重点分析了物联网体系常用的通讯协议,在下半部分,笔者将分享物联网体系的通信协议。 -
浏览器点击链接打开指定APP详解
2019-07-15 19:46:24android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化... -
Dubbo源码学习--协议Protocol(一)
2018-04-13 20:12:401、默认协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,... -
Android 通过自定义 scheme 协议来实现 Web 页面启动原生 APP
2019-03-03 17:46:36当我们在浏览器中打开某些网页,有时候会发现它有一个功能是可以实现吊起手机中已安装的某个 APP,像我们在浏览器打开 csdn 的一篇博客,或者在浏览器打开知乎的一篇文章时,都会有一个类似去APP阅读的按钮。... -
分布式通信协议-http(分布式笔记)
2019-05-23 12:50:48HTTP协议概述 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:31PU设备上线后,向CMU注册,建立连接 CMU与PU进行信令交互,请求能力集,获取配置 CU上线,向CMU注册,建立连接 CMU与CU进行信令交互,传输设备列表 CU向PU请求码流 右图: PU设备上线后,向CMU发送HELLO消息 CMU需要...