Interceptar enlaces desde el 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 dado en lugar de permitir que el navegador lo 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 recientemente recaudada.

Por ejemplo, haz clic en un enlace de YouTube desde cualquier parte del teléfono y tendrás la oportunidad de abrir la aplicación de YouTube.

¿Cómo puedo lograr esto para mi propia aplicación?

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

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

<activity android:name=".PhotostreamActivity" android:label="@string/application_name"> <!-- ... --> <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="http" android:host="flickr.com" android:pathPrefix="/photos/" /> <data android:scheme="http" android:host="www.flickr.com" android:pathPrefix="/photos/" /> </intent-filter> </activity> 

Una vez dentro, estás en la actividad , necesitas buscar la acción, y luego haz algo con la URL que te han entregado. El método Intent.getData() le da un Uri.

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

Cabe señalar, sin embargo, que esta aplicación es un poco fuera de fecha (1.2), por lo que puede encontrar hay mejores maneras de lograr esto.

Hay algunas bibliotecas analizar los parámetros de url automáticamente.

como

https://github.com/airbnb/DeepLinkDispatch

Un

https://github.com/mzule/ActivityRouter

El más tarde es escrito por mí. Que puede analizar parámetros de tipo dado, no siempre String.

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; } } 
  • La sustitución de url de Android no funciona en la redirección
  • Compartir texto + enlaces con intención
  • Android recibe archivos compartidos pero no comparte contenido de texto
  • Impedir que la actividad principal se inicie si ya se está ejecutando
  • Actividad / aplicación iniciada desde NFC nunca aparece en la lista de aplicaciones recientes
  • Firefox para Android no inicia la aplicación cuando se hace clic en el enlace
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.