Home » Android » Intercepting links from the browser to open my Android app

Intercepting links from the browser to open my Android app

Posted by: admin March 11, 2020 Leave a comment


I’d like to be able to prompt my app to open a link when user clicks on an URL of a given pattern instead of allowing the browser to open it. This could be when the user is on a web page in the browser or in an email client or within a WebView in a freshly-minted app.

For example, click on a YouTube link from anywhere in the phone and you’ll be given the chance to open the YouTube app.

How do I achieve this for my own app?

How to&Answers:

Use an android.intent.action.VIEW of category android.intent.category.BROWSABLE.

From Romain Guy’s Photostream app’s AndroidManifest.xml,


        <!-- ... -->            

            <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:pathPrefix="/photos/" />
            <data android:scheme="http"
                  android:pathPrefix="/photos/" />

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




The later one is wrote by me. Which can parse parameters to given type, not always String.


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


private class MyWebViewClient extends WebViewClient {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.indexOf("pattern") != -1) {
            // do something
            return false;
        } else {

        return true;