una que nativa linking link ejemplos desde app abrir java android browser

java - que - ¿Cómo registrar un espacio de nombre URL(myapp://app.start/) para acceder a su programa llamando a una URL en el navegador en el sistema operativo Android?



ejemplos de web app (4)

Así que quiero crear una aplicación de Android para que se registre en algún lugar del sistema operativo Android (o simplemente comience al inicio del sistema) y cuando el usuario haga clic en un botón especial en una página web dentro de un navegador web a la:

<a href="myapp://mysettings">Foo</a>

mi aplicación aparecería y se ejecutaría usando los parámetros enviados en esa URL.

Entonces, ¿cómo hago tal cosa?

Necesito un tutorial con código!


Aquí está mi contribución a la persecución.

Cree un filtro de intención en la actividad que desea cargar en el manifiesto como este:

<intent-filter> <action android:name="com.bubblebeats.MY_CUSTOM_ACTION" /> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter>

La URL de su página web para esto se verá así:

intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end

El código HTML más básico para ejecutar tu apk desde un navegador sería este:

<body> <a href="intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end">click to load apk</a> </body>

Para agregar variables a su intención

Puedes generar el URI desde dentro de tu código de Android así:

Intent i = new Intent(); i.setAction("com.bubblebeats.MY_CUSTOM_ACTION"); i.putExtra("some_variable", "123456"); Log.d("ezpz", i.toUri(Intent.URI_INTENT_SCHEME));

Esto producirá esto:

04-13 09:47:30.742: DEBUG/ezpz(9098): intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

Solo quieres esta parte:

intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

Eche un vistazo a lo que ocurrió aquí y puede ver cómo puede omitir el paso del código y crear estos URI manualmente.

Especialmente esta parte:

S.some_variable=123456


Debe seguir las reglas estándar para los URI a través del W3C y demás, lo que básicamente significa: no haga esto.

Android define una sintaxis de Uri para describir un Intento genérico. Existen métodos de Intento para convertir hacia y desde esta representación, como por ejemplo: http://developer.android.com/reference/android/content/Intent.html#toUri(int)

Entonces, la forma de hacerlo es utilizar las instalaciones normales para describir una en su manifiesto para los tipos de intentos que va a manejar con un componente en particular, especialmente definir un nombre de acción en su propio espacio de nombres (com.mycompany.myapp.action .DO_SOMETHING o lo que sea). A continuación, puede crear un Intento que coincida con su componente y usar Intent.toUri () para obtener la representación URI de esto. Esto se puede colocar en su enlace, y luego, cuando lo presione, busque algo que maneje y, por lo tanto, encuentre su aplicación. Nota para ser lanzado desde el navegador de esta manera, el componente debe manejar la categoría BROWSABLE. (No necesita tener esto en la intención que ingresó en el enlace, el navegador lo agregará automáticamente).

Finalmente, es posible que desee establecer el paquete del intento en su aplicación con esto: http://developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String)

Esta es una característica más nueva de la plataforma, que le permite dirigir los intentos de enlace a solo su aplicación para que otras aplicaciones no puedan interceptarlos ni manejarlos.

En resumen: lea la documentación habitual sobre intents y filtros de intención (como el tutorial de NotePad, aunque no usará contenido: URI aquí, probablemente solo acciones personalizadas) y haga que su aplicación funcione de esa manera. A continuación, puede crear un enlace de navegador para iniciar su aplicación de la misma manera, siempre que su filtro de intención maneje la categoría BROWSABLE.


Debido a que hackbod nunca nos dio ejemplos de código, solo quiero compartir el mío, después de que esto funcione.

En primer lugar, debe definir una acción personalizada en su archivo de manifiesto:

<activity android:name=".activity.MainActivity" android:label="@string/app_name_full"> <intent-filter> <action android:name="com.yourpackage.action.OPEN_VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="android.intent.category.BROWSABLE"></category> </intent-filter> </activity>

Luego, para el contenido de su sitio web, debe generar el URI desde un intento. Ponga el siguiente código en su Actividad (Este código podría eliminarse, una vez que se haya generado el enlace):

Intent i = new Intent(); i.setAction("com.yourpackage.action.OPEN_VIEW"); i.setPackage("com.yourpackage"); i.putExtra("myextra","anystring"); Log.d(getClass().getSimpleName(), i.toUri(Intent.URI_INTENT_SCHEME));

Para recibir los Extras, ponga lo siguiente en su actividad, que pueda recibir la acción personalizada (como se define en el manifiesto):

final Intent intent = getIntent(); final String action = intent.getAction(); if ("com.yourpackage.action.OPEN_VIEW".equals(action)) { Log.i(getClass().getSimpleName(), "EXTRA: "+intent.getExtras().getString("myextra")); }

En su sitio web (este es el enlace generado anteriormente):

<a href="intent:#Intent;action=com.yourpackage.action.OPEN_VIEW;package=com.yourpackage;S.myextra=anystring;end">Open App with extra</a>

Espero que ayude a alguien a entender mejor. Por favor corrígeme, si tengo algo mal.


Primero, para poder iniciar su aplicación desde el enlace con el esquema personalizado ''myapp'' en el navegador / correo, configure el filtro de intención de la siguiente manera.

<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="myapp"/> </intent-filter>

y para analizar consultas en su enlace myapp: // someaction /? var = str & varr = string
(el código ha sido simplificado y no tiene errores de verificación).

Intent intent = getIntent(); // check if this intent is started via custom scheme link if (Intent.ACTION_VIEW.equals(intent.getAction())) { Uri uri = intent.getData(); // may be some test here with your custom uri String var = uri.getQueryParameter("var"); // "str" is set String varr = uri.getQueryParameter("varr"); // "string" is set }

[edit] si usa un esquema personalizado para iniciar su aplicación, uno de los problemas es que: WebView en otras aplicaciones puede no entender su esquema personalizado. Esto podría llevar a mostrar la página 404 para el navegador para el enlace con el esquema personalizado.