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

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