التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 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، مثل ما يلي:

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

تعرَّف على مزيد من المعلومات حول كيفية طلب إذن بالوصول إلى أجهزة 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).

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

بدءًا من الإصدار 13 من نظام التشغيل Android، يعرض النظام ما يصل إلى خمسة أزرار إجراءات استنادًا إلى 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 قيمة منطقية true للمفتاح SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV.
3 التالي تشمل إجراءات PlaybackState ACTION_SKIP_TO_NEXT.
قرض مخصص PlaybackState لا تشمل الإجراءات ACTION_SKIP_TO_NEXT، بينما تتضمّن الإجراءات المخصّصة في PlaybackState إجراءً مخصّصًا لم يتم وضعه إلى الآن.
ما مِن لاعبين تتضمّن العناصر الإضافية في PlaybackState قيمة منطقية 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() نهائيًا.

بالنسبة إلى التطبيقات التي تستهدف Android 13 (المستوى 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.

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

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

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