koppelingen onderscheppen in de browser om mijn Android-app

Ik zou graag mijn app willen vragen om een ​​link te openen wanneer de gebruiker klikt op een URL van een bepaald patroon in plaats van de browser toe te staan ​​het te openen. Dit kan zijn wanneer de gebruiker op een webpagina staat in de browser of in een e-mailclient of binnen een Webview in een versmuntende app.

Klik bijvoorbeeld op een YouTube-link van overal in de telefoon en krijgt u de kans om de YouTube-app te openen.

Hoe bereik ik dit voor mijn eigen app?


Antwoord 1, Autoriteit 100%

Gebruik een Android.Intent.action.view van categorie Android.InTent .category.Browable .

van Romain Guy’s fototream app’s 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>

Eenmaal binnen bevindt u zich in de Activiteit , je moet op zoek naar de actie en dan iets doen met de URL die je hebt overhandigd. De Intent.getData()methode geeft u een 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);
        }
    }

Er moet echter worden opgemerkt dat deze app een beetje verouderd is (1.2), dus u kunt er misschien vinden dat er betere manieren zijn om dit te bereiken.


Antwoord 2

Er zijn sommige bibliotheken parseerparameters van URL automatisch.

zoals

https://github.com/airbnb/depplinkdispatch

& amp; & amp;

https://github.com/mzule/activityrouter

De latere wordt door mij geschreven. Die parameters kunnen ontleden op het gegeven type, niet altijd string.

Voorbeeld

@Router(value = "main/:id" intExtra = "id")
...
int id = getIntent().getInt("id", 0);

Antwoord 3

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

Other episodes