我想要创建一个安装在多个平台(Windows,Mac OS,Linux)上的Java应用程序,作为此安装的一部分,我希望注册一个URL协议处理程序,以便在单击链接时加载我的应用程序.
即我想要这样的东西:myprotocol://example.com
这样做有什么综合方式吗?或者某种框架推断不同操作系统的差异.
我刚刚为MultiBit项目(一个轻量级的比特币客户端)走了这条路,我必须实现启动和更新应用程序以响应自定义URI(在我的例子中bitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text
).
我必须实现它的方法是创建一个接收操作系统事件的通用方法.很多这项工作都是基于Macify库,然后重写以支持多个任意平台.
首先是一些背景.通常,协议处理程序在操作系统端注册,而不是在浏览器端注册.这是因为协议不仅限于浏览器,因此需要一般的支持机制.因此,您需要为要支持的每个平台创建处理程序.
例如,在Mac世界中,存在EAWT库,该库不可用于分发,但提供对本机事件API的访问.这意味着您的应用程序需要能够在运行时找到该库,然后反思地使用本机类(您无法对它们进行硬编码,因为您无法保证在具有支持的平台上构建应用程序库,由于许可限制,您不能包含它.如果这听起来很辛苦 - 请相信我.
在Windows上,您需要更新注册表,以便在有人使用该协议时启动您的应用程序.Microsoft提供了一组有用的说明,详细说明了此过程.
在Linux上,这些命令通常用于Gnome 2(在命令行上传递URI):
gconftool-2 -t string -s /desktop/gnome/url-handlers/bitcoin/command "bin/multibit %s" gconftool-2 -s /desktop/gnome/url-handlers/bitcoin/needs_terminal false -t bool gconftool-2 -t bool -s /desktop/gnome/url-handlers/bitcoin/enabled true
编辑2014年7月
在使用Gnome 3(Ubuntu 11.04+)的Linux上,情况有点不同,依赖于exampleapp.desktop
放在/usr/share/applications
文件夹中的文件sudo update-desktop-database
.
足够的说话 - 给我代码!
您可以在MultiBit源代码中找到它.我并不打算把它拉进它自己的项目中,而是钻进platform
包中,只需从那里拉出代码就足够了(它是独立的).应用程序使用IzPack进行安装,因此Windows的注册表项也可供使用.
该代码最初是在v0.3分支中引入的,但从2012年第一季度开始将成为主流.它都是麻省理工学院的许可证,因此您可以随心所欲地做任何事情.如果您发现错误,请报告它们,或者更好地修复它们并提供拉取请求,以便其他人可以受益.