Перехват ссылок из браузера для открытия моего приложения для Android

StackOverflow https://stackoverflow.com/questions/1609573

Вопрос

Я хотел бы иметь возможность запрашивать у моего приложения открытие ссылки, когда пользователь нажимает на URL с заданным шаблоном, вместо того, чтобы разрешать браузеру открывать ее.Это может быть, когда пользователь находится на веб-странице в браузере, или в почтовом клиенте, или в WebView свежеиспеченного приложения.

Например, нажмите на ссылку YouTube из любого места телефона, и вам будет предоставлена возможность открыть приложение YouTube.

Как мне добиться этого для моего собственного приложения?

Это было полезно?

Решение

Используйте 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>

Оказавшись внутри, вы находитесь в активность , вам нужно найти действие, а затем сделать что-то с 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

&&

https://github.com/mzule/ActivityRouter

Более поздний написан мной.Который может анализировать параметры для заданного типа, не всегда String.

Пример

@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