.NET程序开发工程师使用URL Scheme协议启动另外程序

文章《》(中译)描述了如何为┅个新的协议开发处理程序(处理器handlers)在一些案例中,可能会描述如何调用另外一个应用程序来处理自定义协议(custom protocol)注册已经存在的應用程序为一个URL协议处理器即可。一旦应用程序被成功地启动我们可以使用命令行参数来重新找回URL来启动它。

  • 注册应用程序来处理自定義协议

注册应用程序来处理自定义协议

你必须添加一个新的key以及相关的value到HKEY_CLASSES_ROOT中来使应用程序可以处理特殊的URL协议。

新注册的key必须与协议scheme相匹配才可以被添加例如,增加一个“alert:”协议被增加到HKEY_CLASSES_ROOT的key必须是alert。在这个新的key之下默认的字符串value将显示新协议的名字,并且URL协议字符串value将包含协议特有的信息或者空字符串Keys将同样被添加到DefaultIconshell中。

默认的DefaultIcon key的字符串value必须是新URL协议图标文件名的路径(译注1:)

keys之后的values都是鼡来调用(或者启动)处理新协议的应用程序。

当一个用户点击一个注册了你的自定义URL协议的链接后Windows Internet Explorer(IE)启动注册的URL协议的处理器。如果指定shellopen命令在注册表中包含一个%1参数的话Internet Explorer传递这个URI给注册协议的处理器。这最后的统一资源标识符(URI)被编码(%1);即16进制换码符被转換为等价的UTF-16字符例如,用%20字符串取代空格

安全警示:应用程序处理URL协议必须全力面对恶意数据。因为处理程序接收来自不信任源的数據URL和其它参数值传递给应用程序可能包含的恶意数据企图使用处理程序。因此处理程序可以首先启动基于外部数据的空闲行为确认这些行为以及它们的用户。

注意:另外处理程序将要有能力处理URLs有可能太长或者包含意想不到(或者多余的)字符串。更多信息请参看《》

4.)如何判断一个Scheme是否有效


本地网页(放在assets目录下):

 
 
 


 
 
 


 
 
 
 

 
 
 
 
 * 与js交互时用到的方法在js里直接调用的
 
通过 WebView的addJavascriptInterface()进行对象映射:
优点:使用简单 , 仅将Android对象和JS对象映射即可
缺点:存在严重的漏洞问题,具体请看文章:



最近由于工作需要使用Scheme方式自萣义URL来跨应用间调用,踩了一些坑现在记录一下。

4、实际使用中的一些小细节

当自定义的URL配置在LAUNCHER对应的Activity上时上述配置就足够了。

但是當自定义的URL配置在非LAUNCHER对应的Activity时还需要增加额外几步操作。

问题二:应用A使用url的方式唤起应用B的Activity时可能存在应用B的Activity启动了,但是堆栈仍嘫在后台的现象即应用B的Activity没有聚焦的问题。

解决方式:这种情况下应用B的Activity收到启动的请求后,可以主动将Activity对应的堆栈移动到最前端

我要回帖

更多关于 NET程序开发工程师 的文章

 

随机推荐