أثناء إنشاء تطبيقك، من المهم مراعاة التطبيقات الأخرى على الجهاز التي يحتاج تطبيقك إلى التفاعل معها. إذا كان تطبيقك يستهدف الإصدار Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجعل النظام بعض التطبيقات مرئية لتطبيقك تلقائيًا، ولكنه يستبعد التطبيقات الأخرى تلقائيًا. ويصف هذا الدليل كيفية جعل تلك التطبيقات الأخرى مرئية لتطبيقك.
إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث ويحتاج إلى التفاعل مع تطبيقات أخرى غير التطبيقات التي تظهر تلقائيًا، يمكنك إضافة العنصر <queries>
إلى ملف البيان الخاص بالتطبيق. داخل العنصر <queries>
، حدِّد التطبيقات الأخرى حسب
اسم الحزمة أو حسب توقيع الغرض
أو حسب هيئة الموفّر
كما هو موضّح في
الأقسام التالية.
أسماء حِزم معيّنة
إذا كنت تعرف التطبيقات المحدّدة التي تريد طلب البحث عنها أو التفاعل معها، مثل
التطبيقات التي تتكامل مع تطبيقك أو التطبيقات التي تستخدم خدماتها، يمكنك تضمين
أسماء الحِزم الخاصة بها في مجموعة من عناصر <package>
داخل العنصر <queries>
:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
التواصل مع تطبيق مضيف في مكتبة
في حال تطوير مكتبة Android، يمكنك توضيح متطلبات إذن الوصول إلى الحزمة عن طريق إضافة عنصر <queries>
في ملف بيان AAR. يؤدي العنصر <queries>
هذا الوظيفة نفسها التي يؤديها العنصر الذي يمكن للتطبيقات الإشارة إليه في بياناتها الخاصة.
إذا كانت مكتبتك تتضمن الاتصال بتطبيق مضيف، مثل استخدام خدمة مرتبطة، يمكنك تضمين عنصر <package>
يحدد اسم حزمة التطبيق المضيف:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
يمكنك من خلال تضمين هذا البيان التحقّق مما إذا كان التطبيق المضيف مثبّتًا
والتفاعل معه، مثل طلب الرقم
bindService()
.
إنّ تطبيق الاتصال الذي يستخدم مكتبتك يظهر تلقائيًا للتطبيق المضيف نتيجة هذا التفاعل.
الحِزم التي تتطابق مع توقيع فلتر الأهداف
قد يحتاج تطبيقك إلى الاستعلام عن مجموعة من التطبيقات التي تخدم غرضًا معيّنًا أو التفاعل معها، ولكنك قد لا تعرف أسماء الحزم المحددة المراد تضمينها. في هذه الحالة، يمكنك إدراج
توقيعات فلاتر الأهداف في
العنصر <queries>
. يمكن لتطبيقك بعد ذلك اكتشاف التطبيقات التي تحتوي على عناصر متطابقة في <intent-filter>
.
يعرض مثال الرمز التالي عنصر <intent>
الذي يسمح للتطبيق بالاطّلاع على التطبيقات الأخرى المثبّتة التي تتيح مشاركة الصور بتنسيق JPEG:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
هناك بعض القيود المفروضة على العنصر <intent>
:
- يجب تضمين عنصر
<action>
واحد فقط. - لا يمكنك استخدام السمات
path
أوpathPrefix
أوpathPattern
أوport
في عنصر<data>
. يتصرف النظام كما لو تم ضبط قيمة كل سمة على حرف البدل العام (*
). - لا يمكنك استخدام السمة
mimeGroup
للعنصر<data>
. ضمن عناصر
<data>
لعنصر<intent>
واحد، يمكنك استخدام كل سمة من السمات التالية في الوقت نفسه:mimeType
scheme
host
يمكنك توزيع هذه السمات على عناصر
<data>
متعدّدة أو استخدامها في عنصر<data>
واحد.
يتيح العنصر <intent>
استخدام حرف البدل العام (*
) كقيمة لبعض السمات:
- السمة
name
للعنصر<action>
- النوع الفرعي للسمة
mimeType
لعنصر<data>
(image/*
). - النوع والنوع الفرعي لسمة
mimeType
للعنصر<data>
(*/*
). - السمة
scheme
للعنصر<data>
- السمة
host
للعنصر<data>
لا يتيح النظام مزيجًا من النصوص وأحرف البدل، مثل prefix*
، ما لم يتم تحديد خلاف ذلك في القائمة السابقة.
الحِزم التي تستخدم مرجعًا محدّدًا
إذا كنت بحاجة إلى إجراء طلب بحث عن موفّر المحتوى ولكنّك لا تعرف أسماء الحزمة المحدّدة، يمكنك تحديد مصدر المرجع في عنصر <provider>
، كما هو موضّح في المقتطف التالي:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
يمكنك تعريف الجهات المقدِّمة للخدمة في عنصر <queries>
واحد. وداخل العنصر <queries>
، يمكنك الإعلان عن عنصر <provider>
واحد أو أكثر. يمكن أن يتضمن العنصر <provider>
مرجعًا موفّرًا واحدًا أو قائمة جهات موفّرة مفصولة بفواصل منقوطة.
جميع التطبيقات (لا ننصح بهذا الخيار)
في حالات نادرة، قد يحتاج تطبيقك إلى طلب بحث عن جميع التطبيقات المثبّتة على الجهاز أو التفاعل معها، بصرف النظر عن المكوّنات التي تحتوي عليها. للسماح لتطبيقك بالاطّلاع
على جميع التطبيقات الأخرى المثبّتة،
يمنح النظام إذن
QUERY_ALL_PACKAGES
.
في ما يلي بعض الأمثلة على حالات الاستخدام التي يكون
من المناسب تضمين الإذن QUERY_ALL_PACKAGES
فيها:
- تطبيقات مخصّصة لتسهيل الاستخدام
- المتصفحات
- تطبيقات إدارة الأجهزة
- تطبيقات الأمان
- تطبيقات مكافحة الفيروسات
ومع ذلك، من الممكن عادةً تلبية حالات استخدام تطبيقك من خلال التفاعل مع مجموعة التطبيقات التي تكون مرئية تلقائيًا ومن خلال الإعلان عن التطبيقات الأخرى التي يحتاج تطبيقك إلى الوصول إليها في ملف البيان. لاحترام خصوصية المستخدم، يجب أن يطلب تطبيقك بأقلّ قدرٍ ممكن من أذونات الوصول اللازمة إلى الحزمة لكي يعمل التطبيق.
يقدّم تحديث السياسة من Google
Play إرشادات للتطبيقات التي تحتاج إلى إذن QUERY_ALL_PACKAGES
.