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


Filtro de intenciones para iniciar mi actividad cuando se hace clic en el URI personalizado

Estoy intentando permitir que un URI se registre para abrirme con mi aplicación. Al igual que el PatternRepository en el Blackberry y el CFBundleURLName / CFBundleURLSchemes en el iPhone. ¿Cómo obtengo los mismos resultados en Android?

El sistema enviará correos electrónicos con el siguiente enlace: myapp://myapp.mycompany.com/index/customerId/12345 . La idea es que el usuario debe poder hacer clic en el enlace para abrir la actividad del cliente en la aplicación.

He intentado numerosas sugerencias de otras publicaciones de SO, pero no puedo conseguir que el sistema operativo reconozca el patrón y abra mi aplicación.

En la aplicación Gmail se ve así: myapp: // myapp.mycompany.com/index/customerId/12345 . Reconoce y subraya la parte myapp.mycompany.com/index/customerId/12345 del enlace y la abre en un navegador. La parte myapp:// no está enlazada .

La aplicación de correo estándar trata el enlace completo como texto sin formato.

¿Que me estoy perdiendo aqui?

PS: Ya he mirado cómo implementar mi propio esquema de URI en Android y 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?

El Manifiesto:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2" android:versionName="0.0.8" package="com.mycompany.myapp.client.android"> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:label="@string/app_name" android:name="myappApplication" android:icon="@drawable/ic_icon_myapp" android:debuggable="true"> <activity android:label="My App" android:name=".gui.activity.LoginActivity" label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".gui.activity.CustomerDetailActivity" > <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> </activity> <activity android:name=".gui.activity.CustomerDetailActivity"/> <activity android:name=".gui.activity.CustomerImageViewerActivity" /> <activity android:name=".gui.activity.CustomerListActivity" android:configChanges="orientation|keyboardHidden"/> <activity android:name=".gui.activity.HomeActivity" android:configChanges="orientation|keyboardHidden"/> <activity android:name=".gui.activity.AboutActivity" android:configChanges="orientation|keyboardHidden"/> <activity android:name=".gui.activity.AccountActivity" android:configChanges="orientation|keyboardHidden" /> </application> </manifest> 

  • Detectar si el contacto tiene foto
  • Android Webview método shouldOverrideUrlLoading
  • Android: Obtener un archivo URI de un URI de contenido?
  • Descubriendo todo acerca de la clase Uri de Android: uso y propósito
  • Convertir una cadena en un Uri ... (Android)
  • Cómo obtener la ruta completa del archivo desde URI
  • ¿Cómo obtener una instancia de archivo de un drawable?
  • Cómo utilizar ExifInterface con una secuencia o un URI
  • 7 Solutions collect form web for “Filtro de intenciones para iniciar mi actividad cuando se hace clic en el URI personalizado”

    La solución final fue una solución alternativa para cubrir todas las bases. El correo electrónico ahora también contiene un archivo adjunto con una extensión que está registrada para abrirse con la aplicación.

    El Manifiesto:

      <activity android:name=".gui.activity.CustomerDetailActivity" > <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="https" android:host="myapp.mycompany.com" /> </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" android:host="myapp.mycompany.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.EDIT" /> <action android:name="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="application/myapp" /> </intent-filter> </activity> 

    Cuando estaba trabajando en OAuth con Google Calendar, tuve que añadir este filtro a la actividad que quería recibir la devolución de llamada:

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

    Cuando el navegador invocó la yourapp://goog , volvería a mi actividad.

    Puede evitar el problema de que GMail no vincule protocolos no estándar mediante una URL HTTP estándar con un redireccionamiento 302. Puede configurarlo en el servidor web o en el servidor de aplicaciones de su sitio web o, para la prueba rápida y sucia, puede utilizar un acortador de URL como http://bit.ly .

    ¿Ha secado la adición de una categoría a su intención-filtro:

     <category android:name="android.intent.category.BROWSABLE" /> 

    Siempre puedes intentar enviar tus correos electrónicos usando HTML y luego usar una etiqueta <a> para crear la URL. No creo que haya una manera de cambiar la forma en que el Gmail o el correo analizar su texto, ya que probablemente utilizan la clase Linkify .

    Otra opción sería utilizar el uso http: // y luego sólo analizar para un subdominio personalizado específico que proporcionaría a sus usuarios la opción de abrir en un navegador o su aplicación.

    Acabo de ejecutar en este también, pero para http: urls de esquema estándar. Gmail no parece agregar ninguna categoría al Intent. Ahora compruebo para BROWSABLE, pero también incluyo una comprobación para! Intention.hasCategories () y permitiré que para pasar también.

    Esta es la solución para mí. Gracias @DanO

     <intent-filter> <data android:scheme="yourcustomname"/> <data android:host="*"/> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.