Перехват ссылок из браузера, чтобы открыть мое приложение для Android
Я хотел бы иметь возможность запрашивать мое приложение, чтобы открыть ссылку, когда пользователь нажимает на URL-адрес данного шаблона вместо того, чтобы позволить браузеру открыть его. Это может быть, когда пользователь находится на веб-странице в браузере или в почтовом клиенте или в веб-представлении в недавно отчеканенном приложении.
например, нажмите на ссылку YouTube из любой точки телефона, и вам будет предоставлена возможность открыть приложение YouTube.
Как я могу добиться этого для моего собственного приложения?
3 ответов:
используйте android.намерение.действие.Вид категории android.намерение.категория.Просматриваемый.
от Ромена Гая Фотогалерея приложения 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
более поздний написан мной. Который может анализировать параметры для данного типа, не всегда строка.
пример
@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; } }
Comments