عند إنشاء تطبيقك، من المهم مراعاة التطبيقات الأخرى على الجهاز التي يحتاج تطبيقك إلى التفاعل معها. إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 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>
. يمكن أن يتضمّن العنصر A
<provider>
سلطة مقدّم خدمة واحد أو قائمة مفصولة بفواصل منقوطة لسلطات مقدّمي الخدمة.
جميع التطبيقات (لا يُنصح به)
في حالات نادرة، قد يحتاج تطبيقك إلى البحث عن جميع التطبيقات المثبَّتة على جهاز أو التفاعل معها، بغض النظر عن المكوّنات التي تحتوي عليها. للسماح لتطبيقك بالاطّلاع على جميع التطبيقات الأخرى المثبَّتة، يوفّر النظام الإذن QUERY_ALL_PACKAGES
.
في ما يلي بعض الأمثلة على حالات الاستخدام التي يكون فيها تضمين إذن QUERY_ALL_PACKAGES
مناسبًا:
- تطبيقات مخصّصة لتسهيل الاستخدام
- المتصفحات
- تطبيقات إدارة الأجهزة
- تطبيقات الأمان
- تطبيقات مكافحة الفيروسات
ومع ذلك، يمكن عادةً تنفيذ حالات استخدام تطبيقك من خلال التفاعل مع مجموعة التطبيقات التي تكون مرئية تلقائيًا ومن خلال الإفصاح عن التطبيقات الأخرى التي يحتاج تطبيقك إلى الوصول إليها في ملف البيان. احترامًا لخصوصية المستخدمين، يجب أن يطلب تطبيقك الحد الأدنى من إذن الوصول إلى حِزم التطبيقات اللازم لكي يعمل تطبيقك.
يقدّم تعديل السياسة هذا من Google Play إرشادات للتطبيقات التي تحتاج إلى إذن QUERY_ALL_PACKAGES
.