التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث

كما هو الحال في الإصدارات السابقة، يتضمّن Android 13 تغييرات في السلوك قد تؤثّر في تطبيقك. وتنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث. إذا كان تطبيقك يستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، عليك تعديل تطبيقك ليتوافق مع هذه السلوكيات بشكل سليم، حيثما ينطبق ذلك.

احرص أيضًا على مراجعة قائمة تغييرات السلوك التي تؤثّر في جميع التطبيقات التي تعمل على Android 13.

الخصوصية

يؤثّر إذن الإشعارات في مظهر الخدمة التي تعمل في المقدّمة

إذا رفض المستخدم إذن تلقّي الإشعارات، لن تظهر له الإشعارات المتعلقة بالخدمات التي تعمل في المقدّمة في درج الإشعارات. ومع ذلك، سيظل بإمكان المستخدمين الاطّلاع على الإشعارات ذات الصلة بالخدمات التي تعمل في المقدّمة في إدارة المهام، بغض النظر عمّا إذا تم منح إذن الإشعارات أم لا.

إذن تشغيل جديد للأجهزة المجاورة التي تستخدم شبكة Wi-Fi

في الإصدارات السابقة من Android، على المستخدم منح تطبيقك إذن ACCESS_FINE_LOCATION لإكمال العديد من حالات الاستخدام الشائعة لشبكة Wi-Fi.

بما أنّه يصعب على المستخدمين ربط أذونات تحديد الموقع الجغرافي بوظائف Wi-Fi، يقدّم نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) إذنًا أثناء التشغيل في مجموعة الأذونات NEARBY_DEVICES للتطبيقات التي تدير اتصالات الجهاز بنقاط الوصول المجاورة عبر Wi-Fi. يستوفي هذا الإذن، NEARBY_WIFI_DEVICES، حالات استخدام شبكة Wi-Fi، مثل ما يلي:

  • العثور على الأجهزة المجاورة أو الربط بها، مثل الطابعات أو أجهزة بث الوسائط يسمح سير العمل هذا لتطبيقك بإنجاز أنواع المهام التالية:
    • تلقّي معلومات نقطة الوصول خارج النطاق، مثلاً من خلال تقنية البلوتوث المنخفض الطاقة (BLE)
    • الاطّلاع على الأجهزة والاتصال بها عبر Wi-Fi Aware والاتصال باستخدام نقطة اتصال للأجهزة المحلية فقط
    • اكتشاف الأجهزة والربط بها عبر "اتصال Wi-Fi مباشر"
  • بدء اتصال بمعرّف SSID معروف، مثل سيارة أو جهاز منزلي ذكي
  • ابدأ نقطة اتصال للأجهزة المحلية فقط.
  • النطاق المتاح للأجهزة المجاورة التي تتوافق مع Wi-Fi Aware

طالما أنّ تطبيقك لا يستمد معلومات الموقع الجغرافي الفعلي من واجهات برمجة تطبيقات Wi-Fi، اطلب الإذن NEARBY_WIFI_DEVICES بدلاً من ACCESS_FINE_LOCATION عند استهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث واستخدام واجهات برمجة تطبيقات Wi-Fi. عند الإفصاح عن إذن NEARBY_WIFI_DEVICES، يجب التأكيد بشدة على أنّ تطبيقك لا يستمد معلومات الموقع الجغرافي مطلقًا من واجهات برمجة تطبيقات Wi-Fi. لإجراء ذلك، اضبط السمة android:usesPermissionFlags على neverForLocation. تشبه هذه العملية تلك التي تجريها في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث عندما تؤكّد أنّ معلومات جهاز Bluetooth لا تُستخدم مطلقًا في تحديد الموقع الجغرافي.

مزيد من المعلومات حول كيفية طلب الإذن بالوصول إلى أجهزة Wi-Fi المجاورة

أذونات الوسائط الدقيقة

الزرّان في مربّع الحوار، من الأعلى إلى الأسفل، هما "السماح" و"عدم السماح".
الشكل 1. مربّع حوار أذونات النظام الذي يظهر للمستخدم عند طلب إذن READ_MEDIA_AUDIO.

إذا كان تطبيقك يستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث ويحتاج إلى الوصول إلى ملفات الوسائط التي أنشأتها تطبيقات أخرى، يجب أن تطلب إذنًا واحدًا أو أكثر من أذونات الوصول الدقيق إلى الوسائط التالية بدلاً من إذن READ_EXTERNAL_STORAGE:

نوع الوسائط الإذن بتقديم طلب
الصور والصور الفوتوغرافية READ_MEDIA_IMAGES
الفيديوهات READ_MEDIA_VIDEO
ملفات صوتية READ_MEDIA_AUDIO

قبل الوصول إلى ملفات الوسائط الخاصة بتطبيق آخر، تأكَّد من أنّ المستخدم قد منح تطبيقك أذونات الوصول إلى الوسائط المناسبة.

تعرض "الشكل 1" تطبيقًا يطلب الإذن READ_MEDIA_AUDIO.

إذا طلبت الإذن READ_MEDIA_IMAGES والإذن READ_MEDIA_VIDEO في الوقت نفسه، لن يظهر سوى مربّع حوار واحد خاص بأذونات النظام.

إذا سبق أن تم منح تطبيقك إذن READ_EXTERNAL_STORAGE، سيتم منح أي أذونات READ_MEDIA_* مطلوبة تلقائيًا عند الترقية. يمكنك استخدام أمر ADB التالي لمراجعة الأذونات التي تمت ترقيتها:

adb shell cmd appops get --uid PACKAGE_NAME

يتطلّب استخدام أجهزة استشعار الجسم في الخلفية الحصول على إذن جديد

يقدّم نظام التشغيل Android 13 مفهوم الوصول "أثناء الاستخدام" إلى أجهزة استشعار الجسم، مثل أجهزة قياس معدّل نبضات القلب ودرجة الحرارة ونسبة الأكسجين في الدم. يشبه نموذج الوصول هذا إلى حد كبير النموذج الذي قدّمه النظام لبيانات الموقع الجغرافي في نظام التشغيل Android 10 (المستوى 29 من واجهة برمجة التطبيقات).

إذا كان تطبيقك يستهدف الإصدار 13 من نظام التشغيل Android ويتطلّب الوصول إلى معلومات أجهزة استشعار الجسم أثناء تشغيله في الخلفية، عليك تضمين الإذن الجديد BODY_SENSORS_BACKGROUND بالإضافة إلى الإذن الحالي BODY_SENSORS.

الأداء والبطارية

استخدام موارد البطارية

إذا وضع المستخدم تطبيقك في الحالة "محظور" لاستخدام البطارية في الخلفية أثناء استهداف تطبيقك لنظام التشغيل Android 13، لن يرسل النظام البث BOOT_COMPLETED أو البث LOCKED_BOOT_COMPLETED إلى أن يتم تشغيل التطبيق لأسباب أخرى.

تجربة المستخدم

عناصر التحكّم في الوسائط المستمَدّة من PlaybackState

بالنسبة إلى التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يستمد النظام عناصر التحكّم في الوسائط من إجراءات PlaybackState. يتيح ذلك للنظام عرض مجموعة أكثر شمولاً من عناصر التحكّم المتوافقة فنيًا بين الهواتف والأجهزة اللوحية، كما يتيح عرض عناصر التحكّم في الوسائط بالطريقة نفسها على منصات Android الأخرى، مثل Android Auto وAndroid TV.

يوضّح الشكل 2 مثالاً على كيفية ظهور ذلك على هاتف وجهاز لوحي، على التوالي.

عناصر التحكّم في الوسائط من حيث طريقة ظهورها على الهواتف والأجهزة اللوحية،
            باستخدام مثال على مقطع صوتي نموذجي يوضّح طريقة ظهور الأزرار
الشكل 2: عناصر التحكّم في الوسائط على أجهزة الهاتف والجهاز اللوحي

قبل الإصدار Android 13، كان النظام يعرض ما يصل إلى خمسة إجراءات من إشعار MediaStyle بالترتيب الذي تم إضافتها به. في الوضع المضغوط، مثلاً في الإعدادات السريعة المصغّرة، كان يتم عرض ما يصل إلى ثلاثة إجراءات محدّدة باستخدام setShowActionsInCompactView().

اعتبارًا من نظام التشغيل Android 13، يعرض النظام ما يصل إلى خمسة أزرار إجراءات استنادًا إلى PlaybackState كما هو موضّح في الجدول التالي. في الوضع المضغوط، سيتم عرض أول ثلاث خانات إجراءات فقط. بالنسبة إلى التطبيقات التي لا تستهدف الإصدار 13 من نظام التشغيل Android أو تلك التي لا تتضمّن PlaybackState، سيعرض النظام عناصر التحكّم استنادًا إلى قائمة Action المُضافة إلى إشعار MediaStyle كما هو موضّح في الفقرة السابقة.

الشريحة الإجراء المعايير
1 تشغيل تكون حالة PlaybackState الحالية إحدى الحالات التالية:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
مؤشر سريان التحميل تكون حالة PlaybackState الحالية إحدى الحالات التالية:
  • STATE_CONNECTING
  • STATE_BUFFERING
إيقاف مؤقت حالة PlaybackState الحالية هي لا شيء مما سبق.
2 السابق تتضمّن PlaybackState الإجراءات ACTION_SKIP_TO_PREVIOUS.
قرض مخصص لا تتضمّن PlaybackState الإجراءات ACTION_SKIP_TO_PREVIOUS، بينما تتضمّن PlaybackState الإجراءات المخصّصة إجراءً مخصّصًا لم يتم وضعه بعد.
فارغ تتضمّن PlaybackState extras قيمة منطقية true للمفتاح SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV.
3 التالي تتضمّن PlaybackState الإجراءات ACTION_SKIP_TO_NEXT.
قرض مخصص لا تتضمّن PlaybackState الإجراءات ACTION_SKIP_TO_NEXT، بينما تتضمّن PlaybackState الإجراءات المخصّصة إجراءً مخصّصًا لم يتم وضعه بعد.
فارغ تتضمّن PlaybackState extras قيمة منطقية true للمفتاح SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT.
4 قرض مخصص تتضمّن PlaybackState الإجراءات المخصّصة إجراءً مخصّصًا لم يتم وضعه بعد.
5 قرض مخصص تتضمّن PlaybackState الإجراءات المخصّصة إجراءً مخصّصًا لم يتم وضعه بعد.

يتم ترتيب الإجراءات المخصّصة حسب ترتيب إضافتها إلى PlaybackState.

تطبيق مظهر ألوان التطبيق تلقائيًا على محتوى WebView

بالنسبة إلى التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، تم إيقاف setForceDark() الطريقة نهائيًا، ما يؤدي إلى عدم تنفيذ أي عملية إذا تم استدعاء الطريقة.

بدلاً من ذلك، يضبط WebView الآن دائمًا طلب البحث عن الوسائط prefers-color-scheme وفقًا لسمة مظهر التطبيق، isLightTheme. بعبارة أخرى، إذا كانت قيمة isLightTheme هي true أو لم يتم تحديدها، تكون قيمة prefers-color-scheme هي light، وإلا تكون dark. ويعني هذا السلوك أنّه يتم تطبيق نمط المحتوى على الويب، سواء كان فاتحًا أو داكنًا، تلقائيًا ليتطابق مع مظهر التطبيق إذا كان المحتوى يتيح ذلك.

في معظم التطبيقات، من المفترض أن يطبّق السلوك الجديد أنماط التطبيق المناسبة تلقائيًا، ولكن عليك اختبار تطبيقك للتحقّق من أي حالات ربما كنت تتحكّم فيها يدويًا في إعدادات الوضع الداكن.

إذا كنت لا تزال بحاجة إلى تخصيص سلوك تصميم الألوان في تطبيقك، استخدِم طريقة setAlgorithmicDarkeningAllowed() بدلاً من ذلك. لضمان التوافق مع الإصدارات السابقة من Android، ننصحك باستخدام طريقة setAlgorithmicDarkeningAllowed() المكافئة في AndroidX.

راجِع مستندات هذه الطريقة لمعرفة المزيد عن السلوك الذي يمكن توقّعه في تطبيقك استنادًا إلى إعدادات targetSdkVersion والمظهر في تطبيقك.

إمكانية الاتصال

تم إيقاف نهائيًا استخدام BluetoothAdapter#enable() وBluetoothAdapter#disable()

بالنسبة إلى التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، تم إيقاف الطريقتَين BluetoothAdapter#enable() و BluetoothAdapter#disable() نهائيًا، وسيتم عرض القيمة false دائمًا.

يتم استثناء أنواع التطبيقات التالية من هذه التغييرات:

  • تطبيقات مالك الجهاز
  • تطبيقات مالك الملف الشخصي
  • تطبيقات النظام

خدمات Google Play

الإذن المطلوب لاستخدام المعرّف الإعلاني

في التطبيقات التي تستخدم المعرّف الإعلاني في "خدمات Google Play" وتستهدف الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يجب تضمين الإذن العادي AD_ID صراحةً في ملف بيان التطبيق على النحو التالي:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

إذا لم يقدّم تطبيقك بيانًا لهذا الإذن عند استهداف الإصدار 13 من نظام التشغيل Android أو إصدار أحدث، ستتم تلقائيًا إزالة المعرِّف الإعلاني واستبداله بسلسلة من الأصفار.

إذا كان تطبيقك يستخدم حِزم SDK تتضمّن الإذن AD_ID في ملف بيان المكتبة، سيتم دمج الإذن مع ملف بيان تطبيقك تلقائيًا. في هذه الحالة، لا تحتاج إلى الإفصاح عن الإذن في ملف البيان الخاص بتطبيقك.

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة المعرّف الإعلاني في مركز مساعدة Play Console.

تعديل القيود المفروضة على استخدام واجهات برمجة التطبيقات غير التابعة لحزمة SDK

يتضمّن نظام التشغيل Android 13 قوائم معدَّلة لواجهات غير SDK المحظورة استنادًا إلى التعاون مع مطوّري تطبيقات Android وأحدث الاختبارات الداخلية. نحرص دائمًا على توفير بدائل عامة قبل فرض قيود على الواجهات غير المتوفّرة في حزمة SDK.

إذا كان تطبيقك لا يستهدف الإصدار 13 من نظام التشغيل Android، قد لا تؤثّر بعض هذه التغييرات فيك على الفور. ومع ذلك، على الرغم من أنّه يمكنك حاليًا استخدام بعض الواجهات غير التابعة لحزمة SDK (حسب مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، فإنّ استخدام أي طريقة أو حقل غير تابع لحزمة SDK ينطوي دائمًا على خطر كبير بتعطُّل تطبيقك.

إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفرة في حزمة SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفرة في حزمة SDK، عليك البدء في التخطيط لنقل البيانات إلى بدائل حزمة SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لواجهات غير متوفرة في حزمة SDK. إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفّرة في حزمة SDK لإحدى الميزات في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.

للاطّلاع على مزيد من المعلومات حول التغييرات في هذا الإصدار من Android، راجِع تعديلات على قيود الواجهات غير التابعة لحزمة SDK في نظام التشغيل Android 13. لمزيد من المعلومات حول الواجهات غير المتوفّرة في حزمة SDK بشكل عام، يمكنك الاطّلاع على القيود المفروضة على الواجهات غير المتوفّرة في حزمة SDK.