¿Hacer un enlace en el navegador de Android para iniciar mi aplicación?

Resuelto Anton asked hace 54 años • 10 respuestas

¿Es posible hacer un enlace como:

<a href="anton://useful_info_for_anton_app">click me!</a>

¿Por qué se inicia mi aplicación Anton?

Sé que esto funciona para la aplicación Android Market con el protocolo de mercado, pero ¿se puede hacer algo similar con otras aplicaciones?

A continuación se muestra 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 eldarera funciona muy bien, pero solo quiero mencionar que tuve algunos problemas con el orden de los subelementos de la <intent-filter>etiqueta. Te sugiero que simplemente hagas otro <intent-filter>con los nuevos subelementos en esa etiqueta para evitar los problemas que tuve. Por ejemplo mi AndroidManifest.xmlaspecto es el siguiente:

<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>
Anton avatar Jan 01 '70 08:01 Anton
Aceptado

¡¡¡NO utilice su propio esquema personalizado de esa manera!!! Los esquemas de URI son un espacio de nombres global de red . ¿Es usted propietario 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 hace Market para interceptar URI en su sitio web:

        <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="http" android:host="market.android.com"
                android:path="/search" />
        </intent-filter>

Alternativamente, existe el esquema "intención:". Esto le permite describir casi cualquier Intent como un URI, que el navegador intentará iniciar al hacer clic. Para crear un esquema de este tipo, la mejor manera es simplemente escribir el código para construir el Intent que desea lanzar y luego imprimir el resultado de intent.toUri(Intent.URI_INTENT_SCHEME).

Puede utilizar 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 al intent antes de iniciarlo, 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 inicie solo su aplicación, es con su propia acción de alcance y usando Intent.setPackage() para decir que el Intent solo coincidirá con el paquete de su aplicación.

Compensaciones entre los dos:

  • Los URI http requieren que tengas un dominio propio. El usuario siempre tendrá la opción de mostrar el URI en el navegador. Tiene propiedades alternativas muy agradables donde, si su aplicación no está instalada, simplemente aterrizará en su sitio web.

  • Los URI de intención requieren que su aplicación ya esté instalada y solo en teléfonos Android. Permiten casi cualquier intención (pero siempre tienen incluida la categoría NAVEGABLE y no admiten 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 a cualquier otra aplicación.

hackbod avatar Aug 12 '2010 21:08 hackbod

Creo que querrás mirar el <intent-filter>elemento de tu archivo Manifiesto. Específicamente, eche un vistazo a la documentación del <data>subelemento.

Básicamente, lo que tendrás que hacer es definir tu propio esquema. Algo parecido a:

<intent-filter>
    <data android:scheme="anton" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> <--Not positive if this one is needed
    ...
</intent-filter>

Entonces deberías poder iniciar tu aplicación con enlaces que comiencen con el anton:esquema URI.

eldarerathis avatar Aug 12 '2010 16:08 eldarerathis

Tengo un complemento jQuery para iniciar aplicaciones nativas desde enlaces web: https://github.com/eusonlito/jquery.applink

Puedes usarlo fácilmente:

<script>
$('a[data-applink]').applink();
</script>

<a href="https://facebook.com/me" data-applink="fb://profile">My Facebook Profile</a>
Lito avatar Sep 10 '2013 09:09 Lito