我想创建一个Java应用程序,可以安装在多个平台上(Windows、Mac OS、Linux),并在安装过程中注册一个URL协议处理程序,以便当链接被点击时加载我的应用程序。
也就是说,我想要像这样的东西:myprotocol://example.com
有没有一种统一的方法来实现这个目标?或者有没有一种框架可以推断不同操作系统之间的差异。
我想创建一个Java应用程序,可以安装在多个平台上(Windows、Mac OS、Linux),并在安装过程中注册一个URL协议处理程序,以便当链接被点击时加载我的应用程序。
也就是说,我想要像这样的东西:myprotocol://example.com
有没有一种统一的方法来实现这个目标?或者有没有一种框架可以推断不同操作系统之间的差异。
我刚刚为 MultiBit 项目(一个轻量级 Bitcoin 客户端)走过这条路,需要实现根据自定义 URI(在我的情况下是 bitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text
)启动和更新应用程序。
我必须创建一种通用的方法来接收操作系统事件。其中大部分工作都基于 Macify library ,然后重写以支持多个任意平台。
首先,需要了解协议处理程序通常在操作系统侧注册,而不是浏览器侧。这是因为协议不仅限于浏览器,因此需要一种通用的支持机制。因此,您需要为每个要支持的平台创建处理程序。
例如,在Mac世界中,有一个名为EAWT的库,它不能被分发,但提供对本地事件API的访问。这意味着您的应用程序需要能够在运行时定位此库,然后通过反射与本地类一起工作(您无法硬编码它们,因为您无法保证将应用程序构建在具有支持库的平台上,并且由于许可限制,您无法包含它)。如果这听起来很辛苦-相信我就是这样。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月修订
在Linux上,如果使用Gnome 3桌面环境(例如Ubuntu 11.04+),情况会有些许不同。需要将exampleapp.desktop
文件放在/usr/share/applications
文件夹中,并跟随sudo update-desktop-database
命令。
别说废话了,给我代码!
可以在MultiBit源码中找到它。我没有将其独立成自己的项目,但深入到platform
包并从那里提取代码就足够了(它是自包含的)。该应用程序使用IzPack安装,因此Windows的注册表条目也可以使用。
这段代码最初是在v0.3分支中首次引入的,但将从2012年第一季度开始成为主流。它的所有权属于MIT许可证,因此您可以随意使用它。如果您发现了错误,请报告它们或更好地修复它们并提供拉取请求,以便其他人受益。
MacApplication
类。 - Gary对于Windows,您可以在安装程序中修改注册表。
REGEDIT4
[HKEY_CLASSES_ROOT\your_protocol]
@="URL: your_protocol"
"URL Protocol"="Your protocol name"
[HKEY_CLASSES_ROOT\your_protocol\DefaultIcon]
@="your_prog_location\your_prog.exe"
[HKEY_CLASSES_ROOT\your_protocol\shell]
[HKEY_CLASSES_ROOT\your_protocol\shell\open]
[HKEY_CLASSES_ROOT\your_protocol\shell\open\command]
@="your_prog_location\your_prog.exe %1"
<a href="http://example.com/file.dan">Dan File</a>
这个文件可以用你的应用程序打开。
以下是注册你的应用程序打开该文件类型的示例代码:
AssociationService serv = new AssociationService();
Association logassoc = new Association();
logassoc.addFileExtension("DAN");
logassoc.addAction( new Action("open", "C:\\WINDOWS\\JAVA.EXE -jar C:\\dan.jar %1"));
以下是完整的文章:了解JDIC文件类型关联
您可能需要以特定于平台的方式执行此操作。以下是在OS X中执行此操作的方法:
<a href=youprotocol://server.com
>启动我的应用程序</a>` 这样的东西吗? - OscarRyz