Cómo implementar mi propio esquema de URI en Android

Digamos que quiero definir 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 de URI globalmente para el sistema operativo Android. es posible?

Esto es algo análogo a lo que algunos progtwigs ya hacen en, por ejemplo, los sistemas de Windows, como Skype ( skype:// ) o cualquier progtwig de descarga de torrent:// ( torrent:// ).

Esto es muy posible; usted define el esquema de URI en su AndroidManifest.xml, usando el elemento . Configura un filtro de intención con el elemento completado, y podrá crear su propio esquema. ( Más sobre filtros de intención y resolución de intención aquí ).

Aquí hay un pequeño ejemplo:

         

Según cómo funcionan los bashs implícitos, debe definir al menos una acción y una categoría también; aquí escogí VER como la acción (aunque podría ser cualquier cosa), y me aseguré de agregar la categoría POR DEFECTO (como se requiere para todos los bashs implícitos). También observe cómo agregué la categoría BROWSABLE: esto no es necesario, pero permitirá que sus URI se puedan abrir desde el navegador (una característica ingeniosa).

Complementando la respuesta de @DanielLew, para obtener los valores de los parámetros, debe hacer esto:

Ejemplo de URI: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

en tu actividad:

 Intent intent = getIntent(); if (Intent.ACTION_VIEW.equals(intent.getAction())) { Uri uri = intent.getData(); String valueOne = uri.getQueryParameter("keyOne"); String valueTwo = uri.getQueryParameter("keyTwo"); } 

Recomiendo encarecidamente que no defina su propio esquema. Esto va en contra de los estándares web para esquemas de URI, que intenta 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 el espacio de nombre entero de Internet, y debe seguir esos estándares.

Si solo quieres tener un enlace a tu propia aplicación, te recomiendo que sigas el enfoque que describí aquí:

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

Otro enfoque alternativo a Diego es usar una biblioteca:

https://github.com/airbnb/DeepLinkDispatch

Puede declarar fácilmente los URI que desea manejar y los parámetros que desea extraer a través de anotaciones en la Actividad, como:

 @DeepLink("path/to/what/i/want") public class SomeActivity extends Activity { ... } 

Como ventaja, los parámetros de consulta también se transmitirán a la Actividad también.