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