Intercepting links from the browser to open my Android app
Use an android.intent.action.VIEW of category android.intent.category.BROWSABLE.
From Romain Guy's Photostream 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>
Once inside you're in the activity, you need to look for the action, and then do something with the URL you've been handed. The Intent.getData()
method gives you a 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); } }
It should be noted, however, that this app is getting a little bit out of date (1.2), so you may find there are better ways of achieving this.
There are some libraries parse parameters from url automatically.
such as
https://github.com/airbnb/DeepLinkDispatch
&&
https://github.com/mzule/ActivityRouter
The later one is wrote by me. Which can parse parameters to given type, not always String.
Example
@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; }}