سؤال

أقول أنني أريد تحديد أن URI مثل:

myapp://path/to/what/i/want?d=This%20is%20a%20test

يجب التعامل معها بواسطة طلبي الخاص، أو الخدمة. لاحظ أن المخطط هو "myapp" و لا "http", ، أو "ftp". وبعد هذا هو بالضبط ما أنويه: تحديد مخطط Uri Uri على مستوى العالم لنظام التشغيل Android. هل هذا ممكن؟

هذا مشابه إلى حد ما لما تفعله بعض البرامج بالفعل، على سبيل المثال، أنظمة Windows، مثل Skype (skype://) أو أي برنامج تنزيل torrent (torrent://).

هل كانت مفيدة؟

المحلول

هذا ممكن جدا؛ يمكنك تحديد نظام URI في AndroidManifest.xml، باستخدام <data> عنصر. يمكنك إعداد مرشح نية مع <data> العنصر المملوء، وستتمكن من إنشاء مخطط خاص بك. فيالمزيد عن مرشحات النوايا ودقة النية هنا.)

إليك مثال قصير:

<activity android:name=".MyUriActivity">
    <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="myapp" android:host="path" />
    </intent-filter>
</activity>

حسب مدى حدة النوايا الضمنية، تحتاج إلى تحديد إجراء واحد على الأقل وفئة واحدة أيضا؛ أنا هنا اخترت عرض كحدث (على الرغم من أنه يمكن أن يكون أي شيء)، وتأكد من إضافة الفئة الافتراضية (كما هو مطلوب لجميع النوايا الضمنية). لاحظ أيضا كيف أضفت الفئة القابلة للتصفح - هذا ليس ضروريا، لكنه سيسمح لأوريس بأن تكون منفتحة من المتصفح (ميزة Nifty).

نصائح أخرى

استكمال @ daniellew. الإجابة، للحصول على قيم المعلمات عليك القيام بذلك:

مثال URI: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

في نشاطك:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

أوصي بشدة أنك لا تحدد مخططك الخاص. هذا يتعارض مع معايير الويب لخطط URI، التي تحاول السيطرة بشكل صارم على هذه الأسماء لسبب وجيه - لتجنب النزاعات الاسم بين الكيانات المختلفة. بمجرد وضع رابط إلى المخطط الخاص بك على موقع ويب، فقد وضعت هذا الاسم القليل في مساحة اسم شبكة الإنترنت بأكملها، ويجب أن يتبع هذه المعايير.

إذا كنت ترغب فقط في أن تكون قادرا على الحصول على رابط إلى التطبيق الخاص بك، أوصي باتباع النهج الذي وصفته هنا:

كيفية تسجيل بعض مساحة الاسم URL (MyApp: //app.start/) للوصول إلى برنامجك عن طريق استدعاء عنوان URL في المتصفح في نظام التشغيل Android؟

نهج بديل آخر في دييغو هو استخدام مكتبة:

https://github.com/airbnb/deeplinkdispatch.

يمكنك بسهولة إعلان URIS أنك ترغب في التعامل مع المعلمات التي ترغب في استخراجها عبر التعليقات التوضيحية على النشاط، مثل:

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

كما زائد، سيتم أيضا تمرير معلمات الاستعلام إلى النشاط أيضا.

مع طرح السؤال منذ سنوات، يتم تطوير Android كثيرا في مخطط URI هذا.
من مخطط URI الأصلي، إلى رابط عميق، والآن وصلات تطبيق Android.

توصي Android الآن باستخدام عناوين URL HTTP، ولا تحدد نظام URI الخاص بك. نظرا لأن ارتباطات تطبيقات Android استخدم عناوين URL HTTH التي تصل إلى مجال موقع الويب الذي تملكه، فلا يمكن لأي تطبيق آخر استخدام روابطك. يمكنك التحقق من مقارنة الرابط العميق وروابط تطبيق أندرويد من هنا

الآن يمكنك بسهولة إضافة مخطط URI باستخدام خيار Android Studio: أدوات> APP Links Assistant. يرجى الرجوع التفاصيل إلى مستند Android: https:/developer.android.com/studio/write/app-link-indexing.html.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top