java cross-platform protocol-handler custom-url-protocol

java - Registro de un controlador de protocolo de URL en varias plataformas



cross-platform protocol-handler (6)

Como parte de esta instalación, deseo crear una aplicación Java que esté instalada en múltiples plataformas (Windows, Mac OS, Linux). Deseo registrar un controlador de protocolo de URL, para que mi aplicación se cargue cuando se haga clic en los enlaces.

es decir, quiero algo como esto: myprotocol: //example.com

¿Hay alguna forma consolidada de hacer esto? O algún tipo de marco que extrapola la diferencia entre los diferentes sistemas operativos.


MultiBit implementa esto en una gama de plataformas

Acabo de recorrer este camino para el proyecto MultiBit (un cliente ligero de Bitcoin ) donde tuve que implementar el lanzamiento y la actualización de una aplicación en respuesta a un URI personalizado (en mi caso bitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text ).

La forma en que tuve que implementarlo fue crear un enfoque genérico para recibir eventos del sistema operativo. Gran parte de este trabajo se basó en la biblioteca Macify y luego se reescribió para admitir múltiples plataformas arbitrarias.

Primero algunos antecedentes. En general, los controladores de protocolo se registran en el lado del sistema operativo, en lugar del lado del navegador. Esto se debe a que los protocolos no se limitan a los navegadores y, por lo tanto, se requiere un mecanismo de soporte general. Por lo tanto, debe crear controladores para cada plataforma que desee admitir.

Por ejemplo, en el mundo Mac, está la biblioteca EAWT que no está disponible para su distribución pero proporciona acceso a la API de eventos nativa. Esto significa que su aplicación debe poder ubicar esta biblioteca en tiempo de ejecución y luego trabajar de manera reflexiva con las clases nativas (no puede codificarlas en forma rígida ya que no puede garantizar que compilará su aplicación en una plataforma que cuente con el soporte). biblioteca y no puede incluirlo debido a restricciones de licencia). Si eso suena como un trabajo duro, créeme que lo es.

En Windows, debe actualizar el registro para que su aplicación se inicie cuando alguien use ese protocolo. Hay un conjunto útil de instrucciones proporcionadas por Microsoft que detallan este proceso.

En Linux, estos comandos generalmente hacen el truco para Gnome 2 (pasar el URI a la línea de comandos):

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

Edición julio 2014

En Linux con Gnome 3 (Ubuntu 11.04+) la situación es un poco diferente dependiendo de un archivo exampleapp.desktop colocado en la carpeta /usr/share/applications seguido de sudo update-desktop-database .

Basta de hablar - dame el código!

Puedes encontrarlo en el código fuente de MultiBit . No me he molestado en extraerlo en su propio proyecto, pero profundizar en el paquete de la platform y simplemente extraer el código desde allí debería ser suficiente (es independiente). La aplicación se instala utilizando IzPack y, por lo tanto, las entradas de registro para Windows también están ahí para usar.

El código se introdujo por primera vez en la rama v0.3 , pero será general desde el primer trimestre de 2012. Es toda la licencia del MIT, por lo que puede hacer lo que quiera con él. Si encuentra errores, infórmelos o, mejor, corríjalos y ofrezca una solicitud de extracción para que otros puedan beneficiarse.


Como alternativa, utilizando el proyecto JDIC puede asociar archivos con aplicaciones específicas.

Esto puede ser útil para sus propuestas. Pero en lugar de registrar todo el protocolo (que puede ser algo complicado), solo puede registrar el tipo de archivo.

Entonces, un enlace como este:

<a href="http://example.com/file.dan">Dan File</a>

Se puede abrir con su aplicación.

Aquí está el código de ejemplo para registrar su aplicación para abrir ese tipo de archivo:

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"));

Aquí está el artículo completo: Entendiendo las asociaciones de tipo de archivo JDIC



Le recomendaría que utilice Java Webstart en lugar de intentar inventar un nuevo esquema de enlace. Ya es compatible con cualquier navegador que tenga Sun Java instalado.


Para Windows, puede modificar el registro en su instalador,

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"