¿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.
- Borrar el historial del navegador Android
- Android lee el historial del navegador
- ¿Cuál es la diferencia entre el navegador de Android Native y Chrome
- SingleCursorHandlerTouchEvent -getEditableSupport FASLE error
- Extensiones del navegador Android
Entonces, ¿cómo hago tal cosa?
Necesito un tutorial con código!
- Gap por encima del encabezado fijo en el navegador Android 4+
- URL del navegador de Android URL
- Obtener el historial de WebView de WebBackForwardList
- El botón de retroceso después de que el deeplink entre en la aplicación no vuelve a donde vino
- Cómo acceder al almacenamiento local del navegador android a través del código nativo
- Historial anterior de WebView sin redirecciones
- Configuración de visor de Android "user-scalable = no" rompe el nivel de ancho / zoom de la ventana de visualización
- Elija un archivo del dispositivo y lo suba a la página cargada en la vista web
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.
- Conectar Android Studio con SVN
- ¿Cómo cambiar el diseño y el color del fondo del hilandero para android?