代码之家  ›  专栏  ›  技术社区  ›  jamesh

从浏览器截取链接以打开我的Android应用程序

  •  103
  • jamesh  · 技术社区  · 15 年前

    我希望能够提示我的应用程序在用户单击给定模式的URL时打开一个链接,而不是允许浏览器打开它。这可能是当用户在浏览器或电子邮件客户端的网页上,或在新开发的应用程序的Web视图中时。

    例如,从手机的任何地方点击YouTube链接,你就有机会打开YouTube应用程序。

    我如何为自己的应用程序实现这一点?

    3 回复  |  直到 8 年前
        1
  •  139
  •   jamesh    15 年前

    使用android.intent.action.view类别 android.intent.category.BROWSABLE .

    从罗曼盖伊的 Photostream 应用程序的 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>
    

    一旦进入你的房间 activity ,您需要查找操作,然后使用您收到的URL进行操作。这个 Intent.getData() 方法为您提供一个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);
            }
        }
    

    但是,应该注意的是,这个应用程序有点过时(1.2),所以您可能会发现有更好的方法来实现这一点。

        2
  •  2
  •   Cao Dongping    9 年前

    有些库会自动解析URL中的参数。

    例如

    https://github.com/airbnb/DeepLinkDispatch

    &&

    https://github.com/mzule/ActivityRouter

    后一个是我写的。它可以将参数解析为给定的类型,而不总是字符串。

    例子

    @Router(value = "main/:id" intExtra = "id")
    ...
    int id = getIntent().getInt("id", 0);
    
        3
  •  0
  •   Dacx    15 年前
    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;
        }
    
    }