Pregunta

Me gustaría poder pedirle 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 lo abra. Esto podría ocurrir cuando el usuario se encuentra en una página web en el navegador o en un cliente de correo electrónico o dentro de una WebView en una aplicación nueva.

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

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

¿Fue útil?

Solución

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

De Photostream de Romain Guy AndroidManifest.xml ,

    <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 activity , debes buscar la acción y luego hacer algo con la URL que has recibido. 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<String> segments = intent.getData().getPathSegments();
        if (segments.size() > 1) {
            mUsername = segments.get(1);
        }
    }

Sin embargo, se debe tener en cuenta que esta aplicación se está quedando un poco desactualizada (1.2), por lo que puede encontrar mejores formas de lograrlo.

Otros consejos

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

como

https://github.com/airbnb/DeepLinkDispatch

& amp; & amp;

https://github.com/mzule/ActivityRouter

El último es escrito por mí. Lo que puede analizar parámetros para un 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;
    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top