اعتراض من الروابط من المتصفح لفتح بلدي الروبوت التطبيق
-
05-07-2019 - |
سؤال
أود أن تكون قادرة على موجه بلدي التطبيق لفتح ارتباط عندما ينقر المستخدم على رابط معين نمط بدلا من السماح المتصفح إلى فتحه.هذا يمكن أن يكون عندما يكون المستخدم على صفحة ويب في المستعرض أو في عميل البريد الإلكتروني أو في WebView في حديثا سكت التطبيق.
على سبيل المثال ، انقر على رابط يوتيوب من أي مكان في الهاتف وعليك أن تعطى فرصة لفتح التطبيق يوتيوب.
كيف يمكنني تحقيق هذا بلدي التطبيق ؟
المحلول
استخدام الروبوت.القصد.العمل.عرض الفئة الروبوت.القصد.فئة.للتصفح.
من رومان الرجل 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), لذلك قد تجد هناك أفضل الطرق لتحقيق ذلك.
نصائح أخرى
وهناك بعض المكتبات تحليل معلمات من رابط تلقائيا.
ومثل
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;
}
}