¿Cómo registrar un espacio de nombres de URL (myapp: //app.start/) para acceder a su programa llamando a una URL en el navegador en Android OS?

Así que quiero crear una aplicación para Android por lo que se registraría en algún lugar en el sistema operativo Android (o sólo se iniciaría en el inicio del sistema) y cuando el usuario del teléfono hace clic en el 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 funcionaría usando los parámetros enviados en esa URL.

Entonces, ¿cómo hago tal cosa?

Necesito un tutorial con código!

Usted necesita seguir las reglas estándar para URIs vía el W3C y tal, que básicamente significa: no haga esto.

Android define una sintaxis Uri para describir una intención genérica. Existen métodos de Intención para convertir a esta representación y desde esta, como: http://developer.android.com/reference/android/content/Intent.html#toUri(int)

Así que la manera de hacer esto es usar las facilidades normales para describir una en su manifiesto para los tipos de intentos que va a manejar con un componente en particular, especialmente definiendo 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 hacer un intento que coincida con su componente y utilizar Intent.toUri () para obtener la representación URI de este. Esto se puede colocar en su enlace, y luego, cuando se presiona buscar algo que maneja y, así, encontrar su aplicación. Nota para ser lanzado desde el navegador como este, el componente debe manejar la categoría BROWSABLE. (No necesitas tener esto en la Intención que has puesto en el enlace, el navegador agregará automáticamente esto para ti.)

Por último, puede que desee establecer el paquete de la intención 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 reciente de la plataforma, que le permite dirigir los intentos de enlace sólo a su aplicación para que otras aplicaciones no puedan interceptarlos y manejarlos.

En resumen: lea la documentación regular sobre intentos y filtros de intención (como el tutorial de Bloc de notas, 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 vínculo de navegador para iniciar su aplicación de la misma forma, siempre que su filtro de intenciones maneje la categoría BROWSABLE.

En primer lugar, para poder iniciar su aplicación desde el enlace con el esquema personalizado 'myapp' en el navegador / correo, defina el filtro de intenciones 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 las consultas en su enlace myapp: // someaction /? Var = str & varr = string
(El código está sobre simplificado y no tiene ninguna comprobación de error.)

 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 } 

Si utiliza el esquema personalizado para lanzar su aplicación, uno de los problemas es el siguiente: El WebView de otras aplicaciones puede no entender su esquema personalizado. Esto podría llevar a mostrar la página 404 para los navegadores para el enlace con esquema personalizado.

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

Cree un filtro de intenciones en la actividad que desea cargar en el manifiesto de la siguiente manera:

 <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> 

Su URL de 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 iniciar tu apk desde un navegador sería así:

 <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

Puede generar el URI desde su código de Android de la siguiente manera:

 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 

Usted sólo quiere 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 de código y manualmente crear estos URIs usted mismo.

Especialmente esta parte:

 S.some_variable=123456 

Debido a hackbod nunca nos dio ejemplos de código, sólo quiero compartir la mía, después de que tengo esto para trabajar.

En primer lugar, es necesario definir una acción personalizada en el 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> 

A continuación, para el contenido de su sitio web, debe generar el URI de una intención. Ponga el código siguiente en su actividad (este código podría ser eliminado, una vez que se genere 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 el siguiente en su actividad, que es capaz de 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 para una mejor comprensión. Por favor, corrija, si tengo algo malo.

  • Emulador de Android: el mensaje de error "Desafortunadamente, el navegador dejó de funcionar"
  • Android Browser Problema con jQuery Ajax y cuando se utiliza appcache
  • Android AVD Emulador Herramientas de desarrollo para el navegador móvil?
  • Cómo abrir la página html local en el navegador
  • Administrador de descarga de navegador para Android
  • HTML: ¿Por qué el navegador de Android muestra "Ir" en lugar de "Siguiente" en el teclado?
  • Soporte de SVG en Android, estado actual
  • Javascript encuentra la diferencia entre Chrome y Dolphin
  • La autenticación de Dropbox deja abierto el navegador
  • Página web del navegador web de Android
  • Detectar navegación anónima / incógnita
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.