Digamos que quiero definir que un URI como:
myapp://path/to/what/i/want?d=This%20is%20a%20test
debe ser manejado por mi propia aplicación o servicio. Tenga en cuenta que el esquema es"myapp"
y no "http"
, o "ftp"
. Eso es precisamente lo que pretendo: definir mi propio esquema URI globalmente para el sistema operativo Android. es posible?
Esto es algo análogo a lo que algunos programas ya hacen en, por ejemplo, sistemas Windows, como Skype ( skype://
) o cualquier programa de descarga de torrents ( torrent://
).
Respuestas:
Esto es muy posible; usted define el esquema URI en su AndroidManifest.xml, utilizando el
<data>
elemento Configura un filtro de intención con el<data>
elemento completado, y podrá crear su propio esquema. ( Más información sobre filtros de intención y resolución de intención aquí ).Aquí hay un breve ejemplo:
Según cómo funcionan los intentos implícitos, también debe definir al menos una acción y una categoría; aquí elegí VIEW como la acción (aunque podría ser cualquier cosa), y me aseguré de agregar la categoría DEFAULT (ya que esto es necesario para todos los intentos implícitos). Observe también cómo agregué la categoría NAVEGABLE: esto no es necesario, pero permitirá que sus URI se puedan abrir desde el navegador (una característica ingeniosa).
fuente
Complementando la respuesta @DanielLew , para obtener los valores de los parámetros tienes que hacer esto:
Ejemplo de URI:
myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
en tu actividad:
fuente
http://www.host.com/directory/value
? ¿Cómo podemos conseguir estovalue
?uri.getLastPathSegment();
Le recomiendo que no defina su propio esquema. Esto va en contra de los estándares web para los esquemas de URI, que intentan controlar rígidamente esos nombres por una buena razón: para evitar conflictos de nombres entre diferentes entidades. Una vez que coloca un enlace a su esquema en un sitio web, ha puesto ese pequeño nombre en todo el espacio de nombres de Internet y debe seguir esos estándares.
Si solo desea poder tener un enlace a su propia aplicación, le recomiendo que siga el enfoque que describí aquí:
¿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 el sistema operativo Android?
fuente
Otro enfoque alternativo a Diego es usar una biblioteca:
https://github.com/airbnb/DeepLinkDispatch
Puede declarar fácilmente los URI que le gustaría manejar y los parámetros que le gustaría extraer a través de anotaciones en la Actividad, como:
Además, los parámetros de consulta también se pasarán a la Actividad.
fuente
Como se hizo la pregunta hace años, y Android evolucionó mucho en este esquema URI.
Desde el esquema URI original, hasta el enlace profundo, y ahora los enlaces de aplicaciones de Android.
Android ahora recomienda usar URL HTTP, no definir su propio esquema de URI. Debido a que los enlaces de aplicaciones de Android usan URL HTTP que enlazan con el dominio de un sitio web que posee, por lo que ninguna otra aplicación puede usar sus enlaces. Puede consultar la comparación de enlaces profundos y enlaces de aplicaciones de Android desde aquí
Ahora puede agregar fácilmente un esquema de URI utilizando la opción de Android Studio: Herramientas> Asistente de enlaces de aplicaciones. Consulte los detalles del documento de Android: https://developer.android.com/studio/write/app-link-indexing.html
fuente