Interceptar enlaces del navegador para abrir mi aplicación de Android

Me gustaría poder solicitar a mi aplicación que abra un enlace cuando el usuario haga clic en una URL de un patrón determinado en lugar de permitir que el navegador la abra. Esto podría ser cuando el usuario está en una página web en el navegador o en un cliente de correo electrónico o dentro de un WebView en una aplicación recién acuñada.

Por ejemplo, haga clic en un enlace de YouTube desde cualquier lugar del teléfono y se le dará la oportunidad de abrir la aplicación de YouTube.

¿Cómo logro esto para mi propia aplicación?

Use un android.intent.action.VIEW de la categoría android.intent.category.BROWSABLE .

Desde AndroidManifest.xml de la aplicación Photostream de Romain Guy,

          

Una vez que está dentro de la actividad , necesita buscar la acción y luego hacer algo con la URL que le entregaron. El método Intent.getData() te da un Uri.

  final Intent intent = getIntent(); final String action = intent.getAction(); if (Intent.ACTION_VIEW.equals(action)) { final List segments = intent.getData().getPathSegments(); if (segments.size() > 1) { mUsername = segments.get(1); } } 

Cabe señalar, sin embargo, que esta aplicación se está quedando un poco desactualizada (1.2), por lo que puede encontrar que hay mejores formas de lograr esto.

Hay algunas bibliotecas que analizan parámetros de url automáticamente.

como

https://github.com/airbnb/DeepLinkDispatch

&&

https://github.com/mzule/ActivityRouter

El último es escrito por mí. Que puede analizar parámetros al tipo dado, no siempre a cadena.

Ejemplo

 @Router(value = "main/:id" intExtra = "id") ... int id = getIntent().getInt("id", 0); 
 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { setUrlparams(url); if (url.indexOf("pattern") != -1) { // do something return false; } else { view.loadUrl(url); } return true; } }