このインストールの一部として、複数のプラットフォーム (Windows、Mac OS、Linux) にインストールされる Java アプリケーションを作成したいのですが、URL プロトコル ハンドラーを登録して、リンクがクリックされたときにアプリが読み込まれるようにします。
つまり、次のようなものが必要です: myprotocol://example.com
これを行うための統合された方法はありますか?または、さまざまな OS 間の違いを推定するある種のフレームワーク。
このインストールの一部として、複数のプラットフォーム (Windows、Mac OS、Linux) にインストールされる Java アプリケーションを作成したいのですが、URL プロトコル ハンドラーを登録して、リンクがクリックされたときにアプリが読み込まれるようにします。
つまり、次のようなものが必要です: myprotocol://example.com
これを行うための統合された方法はありますか?または、さまざまな OS 間の違いを推定するある種のフレームワーク。
カスタム URI (私の場合は ) に応じてアプリの起動と更新を実装する必要があった MultiBit プロジェクト (軽量のビットコインクライアント)のためにこの道を進んできましたbitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text
。
私が実装しなければならなかった方法は、オペレーティング システム イベントを受信するための一般的なアプローチを作成することでした。この作業の多くはMacify ライブラリに基づいており、複数の任意のプラットフォームをサポートするように書き直されました。
最初にいくつかの背景。通常、プロトコル ハンドラはブラウザ側ではなく、オペレーティング システム側で登録されます。これは、プロトコルがブラウザに限定されていないため、一般的なサポート メカニズムが必要なためです。したがって、サポートするプラットフォームごとにハンドラーを作成する必要があります。
たとえば、Mac の世界では、配布には使用できませんが、ネイティブ イベント API へのアクセスを提供する EAWT ライブラリがあります。これは、アプリケーションが実行時にこのライブラリを見つけて、反射的にネイティブ クラスを操作できる必要があることを意味します (サポートされているプラットフォームでアプリケーションをビルドすることを保証できないため、それらをハード コードすることはできません)。ライブラリであり、ライセンスの制限により含めることはできません)。それが大変な作業のように聞こえる場合は、そうであると信じてください。
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 年第 1 四半期から主流になる予定です。すべて MIT ライセンスなので、好きなように操作できます。バグを見つけた場合は、報告するか、修正してプル リクエストを送信し、他のユーザーが恩恵を受けられるようにしてください。
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"
別の方法として、JDIC プロジェクトを使用して、ファイルを特定のアプリケーションに関連付けることができます。
これはあなたの提案に役立つかもしれません。しかし、プロトコル全体を登録する代わりに (やや複雑かもしれません)、ファイル タイプのみを登録することもできます。
したがって、次のようなリンクです。
<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でそれを行う方法は次のとおりです
新しいリンク スキームを考え出すよりも、Java Webstartを使用することをお勧めします。Sun Java がインストールされているすべてのブラウザーで既にサポートされています。
Firefox では、独自のプロトコルを登録できます。
この記事では、プロトコル登録について詳しく説明します。おそらくそこから自動化できます。