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

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