تقديم بيان إذن الوصول إلى الحزمة

أثناء إنشاء تطبيقك، من المهم مراعاة التطبيقات الأخرى على الجهاز التي يحتاج تطبيقك إلى التفاعل معها. إذا كان تطبيقك يستهدف 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(). يصبح تطبيق الاتصال الذي يستخدم مكتبتك مرئيًا تلقائيًا للتطبيق المضيف نتيجةً لهذا التفاعل.

الحِزم التي تتطابق مع توقيع intent filter

قد يحتاج تطبيقك إلى طلب البحث أو التفاعل مع مجموعة من التطبيقات التي تخدم غرضًا معيّنًا، ولكن قد لا تعرف أسماء الحِزم المحدّدة التي يجب تضمينها. في هذه الحالة، يمكنك إدراج توقيعات intent filter في عنصر <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".