Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Esquema de url personalizado de Android.?

Estoy tratando de crear mi propio esquema de URL para que mi aplicación de Android se puede llamar a través de una URL, pero por ahora no tengo un éxito.

Estoy tratando de tener esta url para trabajar: cedemo: //com.cedemo.scan? X = toto

  • ¿Cómo puedo activar o desactivar el GPS mediante programación en Android?
  • Quitar fragmento antiguo del gestor de fragmentos
  • Android ArrayList <MyObject> pasar como parcelable
  • Perforar un agujero en una superposición de rectángulo con aceleración HW activada en Ver
  • ¿Cómo conectar una impresora de red a través de Android?
  • Teclado de correo electrónico para editar texto
  • Aquí es parte de mi archivo de manifiesto:

    <activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.GALLERY" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

    ¿Alguien puede ayudarme a decirme qué está mal? Además, si alguien encuentra lo que está mal, ¿alguien puede decirme cómo leí la variable "X" desde el interior del código android de mi aplicación?


    Actualizar:

    Actualización: Hice la modificación de la acción (como se aconseja en una de las respuestas) y ha funcionado bien. La cosa es que todavía no puedo conseguir el valor de la variable url. Aquí está el código que intenté.

     final Intent intent = getIntent(); final String myScheme=intent.getScheme(); final Bundle myBundle=intent.getExtras(); final boolean inContestKey; if (myBundle != null) { inContestKey=myBundle.containsKey("inContest"); } final Uri myURI=intent.getData(); final String value; if (myURI != null) { value = myURI.getQueryParameter("inContest"); } 

    Pero recibiendo null de todas las funciones … ¿qué más puedo hacer?

    Puede ser que debo explicar mejor el contexto de mi software:

    1. Se ha iniciado mi software
    2. Mi software inicia el navegador
    3. El usuario hace clic en un enlace en el navegador y el navegador ir al esquema de url, volver al software con una variable "X" (por ejemplo)
    4. El software debe leer la variable "X"

    Pero en mi caso: myScheme , myBundle , myURI están establecidos en null .

    Algunas ideas ?


    Actualizar:

    He encontrado la respuesta es que usted tiene que estar en la actividad principal para hacer eso.

  • Android y la elección del marco IOS backend?
  • Bloque de texto de visualización en la pantalla de preferencias
  • ¿Debo usar JavaCV o la biblioteca Java de OpenCV en Android?
  • ¿Cómo instalar la versión antigua de las herramientas de compilación de Android desde la línea de comandos?
  • Los simulacros de Mockito ejecutan el código actual de Android en Lollipop o superior
  • ¿Cómo solucionar el error "proceso es malo" para un Widget de Android?
  • 3 Solutions collect form web for “Esquema de url personalizado de Android.?”

    Creo que el problema es con la Acción que definiste. Hay un "android.intent.action.VIEW" que es lo que creo que quieres.

     <activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <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="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

    Trate de que y apuesto a resolver correctamente. Sólo hice esta suposición porque incluía la categoría navegable que usualmente se utiliza en el explorador, que no conoce ninguna de sus acciones personalizadas. Si desea que la acción GALLERY como se ha implícito a continuación, sólo crear 2 filtros

     <activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.GALLERY" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> <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="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

    Así que dentro del contenido de su actividad puede hacer algo como:

     // Value should be "toto" as in your example String value = getData().getQueryParameter("X"); 

    Lo que finalmente arregló las cosas para mí fue cambiar el orden de los elementos XML. Específicamente, cambiar las filas de datos y de acciones para que los datos estén antes de la acción hizo que empezara a funcionar.

      <intent-filter> <data android:scheme="myappname" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

    Y para la integridad, mi enlace en el html es "myappname: // noop".

    Una cosa más, me gustaría arrojar luz. Inicialmente no funcionaba para mí porque estaba usando las etiquetas de Main / Launcher antes de Ver / Default / Browsable / data.

    Una vez que cambié el orden que comenzó a trabajar bien. Ie Inicialmente no funciona el código

     <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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> 

    Código correcto

      <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> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

    Y la forma de probar para Android es muy simple. Hacer cualquier archivo html insertar

     <a href="myapp://http://www.google.com/">test to launch myapp</a> <br /><br /> 

    Simplemente abra este archivo html y haga clic en prueba para …. 🙂

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.