¿Es posible hacer un enlace como:
<a href="anton://useful_info_for_anton_app">click me!</a>
hacer que mi aplicación Anton se inicie?
Sé que esto funciona para la aplicación Android Market con el protocolo de mercado, pero ¿se puede hacer algo similar con otras aplicaciones?
Aquí hay un ejemplo de un enlace que iniciará Android Market:
<a href="market://search?q=pname:com.nytimes.android">click me!</a>
Actualización:
la respuesta que acepté proporcionada por eldarerathis funciona muy bien, pero solo quiero mencionar que tuve algunos problemas con el orden de los subelementos de la <intent-filter>
etiqueta. Le sugiero que simplemente haga otro <intent-filter>
con los nuevos subelementos en esa etiqueta para evitar los problemas que tuve. Por ejemplo mi se AndroidManifest.xml
ve así:
<activity android:name=".AntonWorld"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="anton" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Respuestas:
Creo que querrás ver el
<intent-filter>
elemento de tu archivo Mainfest. Específicamente, eche un vistazo a la documentación del<data>
subelemento.Básicamente, lo que tendrá que hacer es definir su propio esquema. Algo en la línea de:
Entonces debería poder iniciar su aplicación con enlaces que comienzan con el
anton:
esquema URI.fuente
¡NO utilices tu propio esquema personalizado así! Los esquemas de URI son un espacio de nombres global de red . ¿Es dueño del esquema "anton:" en todo el mundo? ¿No? Entonces NO lo uses.
Una opción es tener un sitio web y tener un filtro de intención para un URI particular en ese sitio web. Por ejemplo, esto es lo que Market hace para interceptar los URI en su sitio web:
Alternativamente, existe el esquema "intento:". Esto le permite describir casi cualquier Intención como un URI, que el navegador intentará iniciar cuando se haga clic. Para construir dicho esquema, la mejor manera es simplemente escribir el código para construir la intención que desea lanzar, y luego imprimir el resultado de intent.toUri (Intent.URI_INTENT_SCHEME).
Puede usar una acción con esta intención para encontrar cualquier actividad que respalde esa acción. El navegador agregará automáticamente la categoría NAVEGABLE a la intención antes de iniciarla, por razones de seguridad; también eliminará cualquier componente explícito que haya proporcionado por el mismo motivo.
La mejor manera de usar esto, si desea asegurarse de que solo se inicie su aplicación, es con su propia acción de alcance y usando Intent.setPackage () para decir que la intención solo coincidirá con el paquete de su aplicación.
Compromisos entre los dos:
Los URI http requieren que tengas un dominio de tu propiedad. El usuario siempre tendrá la opción de mostrar el URI en el navegador. Tiene propiedades de respaldo muy agradables donde, si su aplicación no está instalada, simplemente aterrizarán en su sitio web.
Los URI intencionados requieren que su aplicación ya esté instalada y solo en teléfonos Android. Permiten casi cualquier intento (pero siempre tienen la categoría NAVEGABLE incluida y no admite componentes explícitos) Le permiten dirigir el inicio solo a su aplicación sin que el usuario tenga la opción de ir al navegador o cualquier otra aplicación.
fuente
market://
enlaces :)Pido disculpas por promocionarme, pero tengo un complemento jQuery para iniciar aplicaciones nativas desde enlaces web https://github.com/eusonlito/jquery.applink
Puedes usarlo fácilmente:
fuente
También me enfrenté a este problema y veo muchas páginas absurdas. Aprendí que para hacer que su aplicación sea navegable, cambie el orden de los elementos XML, esto:
Esto funcionó para mí y podría ayudarte.
fuente
Aquí está mi receta:
Cree un HTML estático que redirija a la URL de la aplicación solicitada, coloque esa página en la web.
De esa manera, los enlaces que comparte son enlaces 'reales' en lo que respecta a Android (serán 'clicables').
Usted 'comparte' un enlace HTTP normal, www.your.server.com/foo/bar.html Esta URL devuelve un HTML simple de 8 líneas que redirige al URI de su aplicación (window.location = "blah: // kuku") ( tenga en cuenta que 'bla' ya no tiene que ser HTTP o HTTPS).
Una vez que tenga esto en funcionamiento, puede aumentar el HTML con todas las capacidades elegantes como se sugirió anteriormente.
Esto funciona con el navegador incorporado, Opera y Firefox (no he probado ningún otro navegador). Firefox pregunta 'Este enlace debe abrirse con una aplicación' (ok, cancelar). Otros navegadores aparentemente no se preocupan tanto por la seguridad, solo abren la aplicación, sin hacer preguntas.
fuente
<a href="iamnearby://register_activate">Activate</a>
Una vez que tenga la intención y el esquema de URL personalizado para la configuración de su aplicación, este código JavaScript en la parte superior de una página receptora me ha funcionado tanto en iOS como en Android:
Esto solo se ha probado en el navegador de Android. No estoy seguro acerca de Firefox u Opera. La clave es que aunque el navegador de Android no arroje una buena excepción para usted
window.open(custom_url, '_blank')
, fallará y volverá,null
lo que puede probar más tarde.Actualización: usando
store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";
para vincular a Google Play en Android.fuente
Es posible que desee considerar una biblioteca para manejar el enlace profundo a su aplicación:
https://github.com/airbnb/DeepLinkDispatch
Puede agregar el filtro de intención en una Actividad anotada como las personas sugeridas anteriormente. Manejará el enrutamiento y el análisis de parámetros para todos sus enlaces profundos. Por ejemplo, su MainActivity podría tener algo como esto:
También puede manejar parámetros de consulta también.
fuente
Prueba mi simple truco:
y mi enlace html:
o se puede hacer <a href = "classRegister: verdad "> <- "verdadero" valor para el nombre del archivo de clase
sin embargo, este script funciona para mailto link :)
fuente
JavascriptInterface
solución alternativa, esta es la solución correcta si necesita admitir 2.3 donde JavaScriptInterface tiene errores.Este método no llama al cuadro de diálogo de desambiguación que le pide que abra su aplicación o un navegador.
Si registra lo siguiente en su manifiesto
y haga clic en esta URL de un correo electrónico en su teléfono, por ejemplo
entonces Android intentará encontrar una aplicación con el paquete com.myApp que responda a la intención de su galería y tenga un esquema myApp . En caso de que no pueda, lo llevará a la tienda, buscando com.myApp , que debería ser su aplicación.
fuente