Intercepting links from the browser to open my Android app

前端 未结 3 880
没有蜡笔的小新
没有蜡笔的小新 2020-11-22 14:54

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 i

相关标签:
3条回答
  • 2020-11-22 15:18
    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;
        }
    
    }
    
    0 讨论(0)
  • 2020-11-22 15:27

    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.

    0 讨论(0)
  • 2020-11-22 15:33

    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);
    
    0 讨论(0)
提交回复
热议问题