質問

ユーザーが特定のパターンのURLをクリックしたときに、ブラウザーに開かせるのではなく、リンクを開くようにアプリに要求できるようにしたい。これは、ユーザーがブラウザまたはメールクライアントのWebページにアクセスしているとき、または新しく作成されたアプリのWebViewにアクセスしているときです。

たとえば、携帯電話のどこからでもYouTubeリンクをクリックすると、YouTubeアプリを開く機会が与えられます。

自分のアプリでこれを実現するにはどうすればよいですか?

役に立ちましたか?

解決

カテゴリのandroid.intent.action.VIEWを使用する android.intent .category.BROWSABLE

Romain Guyの 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>

一度あなたがアクティビティ、アクションを探す必要があり、渡された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)。したがって、これを達成するためのより良い方法があるかもしれません。

他のヒント

URLからパラメータを自動的に解析するライブラリがいくつかあります。

など

https://github.com/airbnb/DeepLinkDispatch

&amp;&amp;

https://github.com/mzule/ActivityRouter

後者は私が書いたものです。常に文字列ではなく、指定された型のパラメーターを解析できます。

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

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top