على غرار الإصدارات السابقة، يتضمّن Android 13 تغييرات في السلوك قد تؤثّر في تطبيقك. تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف Android 13 أو الإصدارات الأحدث. إذا كان تطبيقك يستهدف Android 13 أو الإصدارات الأحدث، عليك تعديله ليتوافق مع هذه السلوكيات بشكل صحيح، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة تغييرات السلوك التي تؤثّر في جميع التطبيقات التي تعمل على 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 عند استهداف Android 13 أو الإصدارات الأحدث واستخدام واجهات برمجة تطبيقات Wi-Fi. عند تقديم بيان الإذن NEARBY_WIFI_DEVICES، أكِّد بشدة أنّ تطبيقك لا يستمد أبدًا معلومات الموقع الجغرافي الفعلي من واجهات برمجة تطبيقات Wi-Fi. لإجراء ذلك، اضبط السمة android:usesPermissionFlags على neverForLocation. تشبه هذه العملية العملية التي تجريها في Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث عندما تؤكد أنّه لا يتم استخدام معلومات جهاز البلوتوث مطلقًا لتحديد الموقع الجغرافي.
مزيد من المعلومات حول كيفية طلب إذن الوصول إلى أجهزة Wi-Fi المجاورة.
أذونات الوسائط الدقيقة
READ_MEDIA_AUDIO.إذا كان تطبيقك يستهدف Android 13 أو الإصدارات الأحدث ويحتاج إلى
الوصول إلى ملفات الوسائط التي أنشأتها تطبيقات أخرى
، عليك
طلب إذن واحد أو أكثر من أذونات الوسائط الدقيقة التالية بدلاً من
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
بالنسبة إلى التطبيقات التي تستهدف Android 13 (مستوى واجهة برمجة التطبيقات 33) والإصدارات الأحدث، يستمد النظام أدوات التحكّم في الوسائط من PlaybackState إجراءات. يسمح ذلك للنظام بعرض مجموعة أكثر شمولاً من عناصر التحكّم المتوافقة فنيًا بين الهواتف والأجهزة اللوحية، كما تتوافق مع طريقة عرض عناصر التحكّم في الوسائط على منصات Android الأخرى، مثل Android Auto وAndroid TV.
يعرض الشكل 2 مثالاً على كيفية ظهور ذلك على الهاتف والجهاز اللوحي، على التوالي.
قبل Android 13، كان النظام يعرض ما يصل إلى خمسة إجراءات من إشعار MediaStyle
بالترتيب الذي تمت إضافتها به.
في الوضع المصغّر، مثلاً في الإعدادات السريعة المصغّرة، كان يتم عرض ما يصل إلى
ثلاثة إجراءات محدّدة باستخدام setShowActionsInCompactView()
كان يتم عرضها.
اعتبارًا من Android 13، يعرض النظام ما يصل إلى خمسة أزرار إجراءات استنادًا إلى PlaybackState كما هو موضّح في الجدول التالي. في الوضع المصغّر، سيتم عرض أول ثلاثة مواضع للإجراءات فقط. بالنسبة إلى التطبيقات التي لا تستهدف Android 13 أو تلك التي لا تتضمّن PlaybackState، سيعرض النظام عناصر التحكّم استنادًا إلى قائمة Action التي تمت إضافتها إلى إشعار MediaStyle كما هو موضّح في الفقرة السابقة.
| الشريحة | الإجراء | المعايير |
|---|---|---|
| 1 | تشغيل |
الحالة الحالية لـ PlaybackState هي إحدى الحالات التالية:
|
| مؤشر سريان عملية التحميل |
الحالة الحالية لـ PlaybackState هي إحدى الحالات التالية:
|
|
| إيقاف مؤقت | الحالة الحالية لـ 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
بالنسبة إلى التطبيقات التي تستهدف Android 13 (المستوى 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() نهائيًا، وتُرجِعان دائمًا القيمة
return false.
يتم استثناء أنواع التطبيقات التالية من هذه التغييرات:
- تطبيقات مالك الجهاز
- تطبيقات مالك الملف الشخصي
- تطبيقات النظام
خدمات Google Play
الإذن المطلوب للمعرّف الإعلاني
يجب أن تقدّم التطبيقات التي تستخدم المعرّف الإعلاني لخدمات Google Play وتستهدف Android 13 (المستوى 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>
إذا لم تقدّم بيان هذا الإذن عند استهداف Android 13 أو الإصدارات الأحدث، تتم تلقائيًا إزالة المعرّف الإعلاني واستبداله بسلسلة من الأصفار.
إذا كان تطبيقك يستخدم حِزم تطوير البرامج (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.