Domanda

Mi piacerebbe essere in grado di chiedere alla mia app di aprire un collegamento quando l'utente fa clic su un URL di un determinato modello invece di consentire al browser di aprirlo. Ciò potrebbe accadere quando l'utente si trova su una pagina Web nel browser o in un client di posta elettronica o all'interno di una WebView in un'app appena coniata.

Ad esempio, fai clic su un link YouTube da qualsiasi parte del telefono e ti verrà data la possibilità di aprire l'app YouTube.

Come ottengo questo risultato per la mia app?

È stato utile?

Soluzione

Utilizza un android.intent.action.VIEW della categoria android.intent .category.BROWSABLE.

Dalla Photostream dell'app 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 volta dentro sei nel attività , devi cercare l'azione, quindi fare qualcosa con l'URL che ti è stato consegnato. Il metodo Intent.getData () ti dà 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);
        }
    }

Va ??notato, tuttavia, che questa app sta diventando un po 'obsoleta (1.2), quindi potresti scoprire che ci sono modi migliori per raggiungere questo obiettivo.

Altri suggerimenti

Esistono alcune librerie che analizzano automaticamente i parametri dall'URL.

come

https://github.com/airbnb/DeepLinkDispatch

& amp; & amp;

https://github.com/mzule/ActivityRouter

Quello successivo è stato scritto da me. Che può analizzare i parametri per un determinato tipo, non sempre String.

Esempio

@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;
    }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top