بالإضافة إلى الميزات والإمكانات الجديدة، يتضمّن الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) مجموعة متنوعة من التغييرات في النظام وسلوك واجهة برمجة التطبيقات. يُبرز هذا المستند بعض التغييرات الرئيسية التي يجب فهمها والأخذ بها في تطبيقاتك.
إذا سبق لك نشر تطبيق لنظام Android، يُرجى العلم أن هذه التغييرات في النظام الأساسي تؤثر في تطبيقك.
أذونات وقت التشغيل
يقدّم هذا الإصدار نموذجًا جديدًا للأذونات، حيث يمكن للمستخدمين الآن إدارة أذونات التطبيقات مباشرةً في وقت التشغيل. يمنح هذا النموذج المستخدمين إمكانية وصول أفضل والتحكم في الأذونات، مع تبسيط عمليات التثبيت والتحديث التلقائي لمطوّري التطبيقات. يمكن للمستخدمين منح الأذونات أو إبطالها بشكل فردي للتطبيقات المثبَّتة.
في تطبيقاتك التي تستهدف الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، احرص على التحقّق من الأذونات وطلبها
أثناء التشغيل. لمعرفة ما إذا كان قد تم منح تطبيقك الإذن، يمكنك استدعاء طريقة checkSelfPermission()
الجديدة. لطلب إذن، يجب استدعاء طريقة
requestPermissions()
الجديدة. حتى إذا لم يكن تطبيقك يستهدف الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات)، عليك اختبار تطبيقك بموجب نموذج الأذونات الجديد.
للحصول على تفاصيل عن توافق تطبيقك مع نموذج الأذونات الجديد، يُرجى الاطّلاع على مقالة العمل مع أذونات النظام. للحصول على نصائح حول كيفية تقييم تأثير ذلك في تطبيقك، يُرجى الاطّلاع على ملاحظات استخدام الأذونات.
وضع "الاستراحة" و"وضع الاستعداد للتطبيقات"
يقدّم هذا الإصدار تحسينات جديدة لتوفير الطاقة في الأجهزة والتطبيقات التي لا تعمل. تؤثر هذه الميزات في جميع التطبيقات، لذا احرص على اختبار تطبيقاتك في هذه الأوضاع الجديدة.
- وضع "الاستراحة": إذا فصل المستخدم الجهاز عن مصدر الطاقة وتركه ثابتًا مع إطفاء الشاشة لمدة زمنية، ينتقل الجهاز إلى وضع الاستراحة الذي يحاول فيه إبقاء النظام في حالة السكون. في هذا الوضع، تستأنف الأجهزة بشكل دوري العمليات العادية لفترات زمنية قصيرة حتى تحدث مزامنة التطبيقات ويتمكّن النظام من تنفيذ أي عمليات معلّقة.
- وضع الاستعداد للتطبيقات: يتيح وضع الاستعداد للتطبيقات إمكانية تحديد ما إذا كان التطبيق غير نشِط لفترة قصيرة عندما لا يستخدمه المستخدم بشكل نشط. ويحدد النظام ذلك عندما لا يلمس المستخدم التطبيق لفترة زمنية معينة. في حال فصل الجهاز عن مصدر الطاقة، يوقف النظام إمكانية الوصول إلى الشبكة ويوقف عمليات المزامنة والمهام للتطبيقات التي يرى أنّها غير نشطة.
لمعرفة المزيد من المعلومات عن هذه التغييرات الموفّرة للطاقة، يُرجى الاطّلاع على التحسين لزيادة القيلولة وتطبيقات وضع الاستعداد.
إزالة Apache HTTP Client
يزيل الإصدار 6.0 من نظام التشغيل Android إمكانية استخدام برنامج Apache HTTP Client. إذا كان تطبيقك يستخدم هذا العميل ويستهدف الإصدار 2.3 من نظام التشغيل Android (المستوى 9 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، استخدِم فئة HttpURLConnection
بدلاً من ذلك. وتتميز واجهة برمجة التطبيقات هذه بأنّها تقلل من استخدام الشبكة من خلال التخزين الشفاف للردود وتقلل من استهلاك الطاقة. لمواصلة استخدام واجهات برمجة التطبيقات Apache HTTP، عليك أولاً تحديد التبعية التالية في وقت الترجمة في ملف build.gradle
:
android { useLibrary 'org.apache.http.legacy' }
BoringSSL
ينتقل Android من مكتبة OpenSSL إلى مكتبة
BoringSSL. إذا كنت تستخدم حزمة Android NDK في تطبيقك، لا تربطها بمكتبات التشفير
التي لا تشكّل جزءًا من واجهة برمجة التطبيقات NDK، مثل libcrypto.so
وlibssl.so
. هذه المكتبات ليست واجهات برمجة تطبيقات عامة، وقد تتغير أو تتوقف بدون إشعار عبر الإصدارات والأجهزة.
بالإضافة إلى ذلك، قد تتعرض نفسك لثغرات أمنية. بدلاً من ذلك، عدِّل
الرمز البرمجي الأصلي لاستدعاء واجهات برمجة تطبيقات التشفير في Java من خلال واجهة JNI أو للربط بشكل ثابت بمكتبة
تشفير من اختيارك.
الوصول إلى معرّف الجهاز
لتوفير المزيد من الحماية للبيانات للمستخدمين، اعتبارًا من هذا الإصدار، لن يتمكن Android من الوصول الآلي إلى معرّف الجهاز المحلي على الجهاز، وذلك للتطبيقات التي تستخدم واجهات برمجة تطبيقات البلوتوث وWi-Fi. وتُرجع الطريقة
WifiInfo.getMacAddress()
و
BluetoothAdapter.getAddress()
الآن قيمة ثابتة تبلغ 02:00:00:00:00:00
.
للوصول إلى معرّفات الأجهزة الخارجية المجاورة من خلال عمليات البحث عن الأجهزة عبر البلوتوث وWi-Fi،
يجب أن يكون لدى تطبيقك الآن إذنَي ACCESS_FINE_LOCATION
أو
ACCESS_COARSE_LOCATION
:
ملاحظة: عندما يبدأ جهاز يعمل بالإصدار 6.0 من Android (المستوى 23 من واجهة برمجة التطبيقات) في إجراء عملية تفتيش في شبكة Wi-Fi أو البلوتوث في الخلفية، تظهر العملية للأجهزة الخارجية على أنّها ناتجة عن عنوان MAC عشوائي.
الإشعارات
في هذا الإصدار، ستتم إزالة طريقة Notification.setLatestEventInfo()
. استخدِم فئة
Notification.Builder
بدلاً من ذلك لإنشاء الإشعارات. لتعديل إشعار بشكل متكرر، أعِد استخدام مثيل Notification.Builder
. ويمكنك استدعاء طريقة build()
للحصول على
مثيلات Notification
المحدّثة.
لم يعُد الأمر adb shell dumpsys notification
يطبع نص الإشعار.
استخدِم الأمر adb shell dumpsys notification --noredact
بدلاً من ذلك لطباعة النص
في عنصر إشعار.
التغييرات في "مدير الصوت"
ولم يعُد من الممكن ضبط مستوى الصوت مباشرةً أو كتم صوت أحداث بث محدّدة من خلال الفئة AudioManager
. تم إيقاف طريقة setStreamSolo()
نهائيًا، وعليك استدعاء الأسلوب
requestAudioFocus()
بدلاً من ذلك. وبالمثل، تمّت
إيقاف الطريقة
setStreamMute()
نهائيًا. بدلاً من ذلك، يمكنك استدعاء الطريقة adjustStreamVolume()
وإدخال قيمة الاتجاه
ADJUST_MUTE
أو
ADJUST_UNMUTE
.
اختيار النص
عندما يختار المستخدمون نصًا في تطبيقك، يمكنك الآن عرض إجراءات اختيار النص، مثل اقتصاص ونسخ ولصق في شريط أدوات عائم. يشبه تنفيذ تفاعل المستخدم تنفيذ شريط الإجراءات السياقية، كما هو موضّح في مقالة تفعيل وضع الإجراءات السياقية لطرق العرض الفردية.
لتنفيذ شريط أدوات عائم لاختيار النص، عليك إجراء التغييرات التالية في تطبيقاتك الحالية:
- في عنصر
View
أوActivity
، غيِّرActionMode
المكالمات منstartActionMode(Callback)
إلىstartActionMode(Callback, ActionMode.TYPE_FLOATING)
. - يمكنك بدلاً من ذلك استخدام آلية تنفيذ
ActionMode.Callback
الحالية وتمديدهاActionMode.Callback2
. - يمكنك إلغاء الطريقة
onGetContentRect()
لتوفير إحداثيات عنصرRect
المحتوى (مثل مستطيل اختيار نص) في العرض. - إذا لم يعُد موضع المستطيل صالحًا، وكان هذا هو العنصر الوحيد الذي لم يعُد صالحًا،
استدِع طريقة
invalidateContentRect()
.
إذا كنت تستخدم الإصدار 22.2 من
مكتبة دعم Android، يُرجى العلم بأنّ أشرطة الأدوات العائمة غير متوافقة مع الإصدارات القديمة، وأنّه يتحكّم تطبيق appcompat بشكل تلقائي في كائنات ActionMode
. يؤدي ذلك إلى منع عرض أشرطة الأدوات العائمة. لتفعيل استخدام
ActionMode
في
AppCompatActivity
، استخدِم دالة
getDelegate()
، ثم استخدِم دالة
setHandleNativeActionModesEnabled()
على عنصر
AppCompatDelegate
الذي تم إرجاعه واضبط مَعلمة input
على false
. يعيد هذا الاستدعاء التحكّم في كائنات ActionMode
إلى إطار العمل. في الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات)، يتيح ذلك للإطار العملي استخدام وضعَي ActionBar
أو شريط الأدوات العائم، بينما في الأجهزة التي تعمل بالإصدار 5.1 من نظام التشغيل Android (المستوى 22 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم، لا يمكن استخدام سوى وضعَي ActionBar
.
تغييرات الإشارات المرجعية في المتصفّح
يزيل هذا الإصدار إمكانية استخدام الإشارات المرجعية الشاملة. تمت الآن إزالة الطريقتين
android.provider.Browser.getAllBookmarks()
وandroid.provider.Browser.saveBookmark()
. وبالمثل، تتم إزالة إذنَي READ_HISTORY_BOOKMARKS
وWRITE_HISTORY_BOOKMARKS
. إذا كان تطبيقك يستهدف الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجب عدم الوصول إلى bookmarkedbookmarks من مقدّم الخدمة العام أو استخدام أذونات الإشارات المرجعية. بدلاً من ذلك، يجب أن يخزن تطبيقك
بيانات الإشارات المرجعية داخليًا.
التغييرات في ملف تخزين مفاتيح Android
مع هذا الإصدار، لم يعُد موفِّر "متجر مفاتيح Android" يتوافق مع التشفير غير المتماثل. وما زال خيار ECDSA متاحًا.
إنّ المفاتيح التي لا تتطلب تشفيرًا غير نشِطة لن يتم حذفها بعد الآن عند إيقاف شاشة القفل الآمنة أو إعادة ضبطها (على سبيل المثال، من قِبل المستخدم أو مشرف الجهاز). وأثناء هذه الأحداث، سيتم حذف المفاتيح التي تتطلب تشفيرًا أثناء عدم النشاط.
تغييرات Wi-Fi والشبكات
يقدّم هذا الإصدار التغييرات التالية في السلوك على واجهات برمجة تطبيقات Wi-Fi والشبكات.
- لا يمكن لتطبيقاتك الآن تغيير حالة عناصر
WifiConfiguration
إلا إذا كنت أنت من أنشأت هذه العناصر. لا يُسمح لك بتعديل أو حذف عناصرWifiConfiguration
التي أنشأها المستخدم أو من خلال تطبيقات أخرى. -
في السابق، إذا فرض أحد التطبيقات على الجهاز الاتصال بشبكة Wi-Fi معيّنة باستخدام
enableNetwork()
مع الإعدادdisableAllOthers=true
، كان الجهاز غير متصل بشبكات أخرى، مثل بيانات شبكة الجوّال. في هذا الإصدار، لم يعُد الجهاز ينقطع الاتصال بمثل هذه الشبكات الأخرى. إذا كانت قيمةtargetSdkVersion
في تطبيقك“20”
أو أقل، يعني ذلك أنّه مثبَّت على شبكة Wi-Fi المحدّدة. إذا كانtargetSdkVersion
لتطبيقك هو“21”
أو إصدار أحدث، استخدِم واجهات برمجة التطبيقات المخصّصة للشبكات المتعددة (مثلopenConnection()
وbindSocket()
وطريقةbindProcessToNetwork()
الجديدة) لضمان إرسال عدد زيارات الشبكة على الشبكة المحدّدة.
التغييرات في خدمة الكاميرا
في هذا الإصدار، تم تغيير نموذج الوصول إلى الموارد المشتركة في خدمة الكاميرا من نموذج الوصول السابق "الأولوية لمن يأتي أولاً" إلى نموذج وصول يمنح الأولوية لعمليات الأولوية العالية. تشمل التغييرات في سلوك الخدمة ما يلي:
- يتم منح إذن الوصول إلى موارد النظام الفرعي للكاميرا، بما في ذلك فتح جهاز الكاميرا وضبطه، استنادًا إلى "الأولوية" لمعالجة تطبيق العميل. وتُعطى بشكلٍ عام أولوية أعلى لعمليات التطبيق التي تتضمّن أنشطة مرئية للمستخدم أو تعمل في المقدّمة، ما يجعل الحصول على موارد الكاميرا أكثر موثوقية.
- قد يتم "إيقاف" برامج الكاميرا النشطة الخاصة بالتطبيقات ذات الأولوية المنخفضة عندما تحاول التطبيقات ذات الأولوية
العالية استخدام الكاميرا. في واجهة برمجة التطبيقات
Camera
التي سيتم إيقافها نهائيًا، يؤدي ذلك إلىonError()
الاستدعاء للعميل الذي تمّت إزالته. في واجهة برمجة تطبيقاتCamera2
، يتم طلبonDisconnected()
إلى العميل الذي تم استبعاده. - على الأجهزة المزوّدة بأجهزة كاميرا مناسبة، يمكن لعمليات التطبيقات المنفصلة فتح أجهزة الكاميرا المنفصلة واستخدامها في الوقت نفسه. ومع ذلك، فإنّ خدمة الكاميرا ترصد الآن حالات استخدام المهام المتعددة التي تؤدي إلى تدهور كبير في أداء أو إمكانات أي من أجهزة الكاميرا المفتوحة عند الوصول إليها في الوقت نفسه، وتمنعها. قد يؤدي هذا التغيير إلى "إغلاق" التطبيقات ذات الأولوية الأقل حتى في حال عدم محاولة أي تطبيق آخر الوصول مباشرةً إلى جهاز الكاميرا نفسه.
- يؤدي تغيير المستخدم الحالي إلى إزالة عملاء الكاميرا النشطين في التطبيقات التي يملكها حساب المستخدم السابق. يقتصر الوصول إلى الكاميرا على الملفات الشخصية للمستخدمين التي يملكها مستخدم الجهاز الحالي. من الناحية العملية، يعني ذلك أنّ حساب "ضيف"، على سبيل المثال، لن يتمكّن من الخروج من العمليات التي تستخدم المنظومة الفرعية للكاميرا عندما ينتقل المستخدم إلى حساب مختلف.
وقت التشغيل
تنفِّذ بيئة تشغيل ART الآن قواعد الوصول إلى الطريقة newInstance()
بشكل صحيح. يعمل هذا التغيير على إصلاح المشكلة المتمثلة في تحقق Dalvik من قواعد الوصول بشكل غير صحيح في الإصدارات السابقة.
إذا كان تطبيقك يستخدم الأسلوب
newInstance()
وأردت
تجاوز عمليات التحقّق من الوصول، يمكنك استدعاء الأسلوب
setAccessible()
مع ضبط المَعلمة
input على true
. إذا كان تطبيقك يستخدم
مكتبة التطبيقات v7 أو
مكتبة إعادة تدوير الإصدار 7،
يجب تحديث تطبيقك لاستخدام أحدث الإصدارات من هذه المكتبات. بخلاف ذلك، تأكَّد من تعديل
أيّ فئات مخصّصة تتم الإشارة إليها من XML حتى يمكن الوصول إلى منشئي الفئات.
يُعدّل هذا الإصدار سلوك أداة الربط الديناميكي. يفهم الرابط الديناميكي الآن
الفرق بين soname
للمكتبة ومسارها
(
الخطأ العام 6670)، ويتم الآن تنفيذ البحث حسب soname
. عند تحميلها، قد يتعذّر تنفيذ التطبيقات التي عملت سابقًا وتحتوي على إدخالات DT_NEEDED
سيئة
(وهي المسارات المطلقة عادةً في نظام الملفات الخاص بجهاز الإصدار).
تم تنفيذ علامة dlopen(3) RTLD_LOCAL
بشكل صحيح الآن. يُرجى العِلم أنّ
RTLD_LOCAL
هو الإعداد التلقائي، لذا ستتأثر الطلبات إلى dlopen(3)
التي لم يتم استخدام RTLD_LOCAL
بشكل صريح (ما لم يكن تطبيقك يستخدم RTLD_GLOBAL
بشكل صريح). باستخدام
RTLD_LOCAL
، لن تتم إتاحة الرموز للمكتبات التي تم تحميلها من خلال الطلبات اللاحقة على
dlopen(3)
(بدلاً من أن يتم الإشارة إليها من خلال إدخالات DT_NEEDED
).
في الإصدارات السابقة من Android، إذا طلب تطبيقك من النظام تحميل مكتبة مشتركة مع
عمليات نقل نصوص، كان النظام يعرض تحذيرًا، ولكنه مع ذلك يسمح بتحميل المكتبة.
بدءًا من هذا الإصدار، يرفض النظام هذه المكتبة إذا كان إصدار حزمة تطوير البرامج (SDK) المستهدَف لتطبيقك هو 23
أو إصدار أحدث. لمساعدتك في رصد حالات تعذُّر تحميل مكتبة، يجب أن يسجِّل تطبيقك تعذُّر
dlopen(3)
، وأن يتضمّن نص وصف المشكلة الذي يعرضه طلب dlerror(3)
. لمعرفة المزيد من المعلومات عن التعامل مع عمليات نقل النص، اطّلِع على هذا
الدليل.
التحقق من صحة APK
تُجري المنصة الآن عمليات تحقّق أكثر صرامة من حِزم APK. تُعتبر حزمة APK تالفة إذا تم تحديد ملف في البيان ولم يكن متوفّرًا في حزمة APK نفسها. يجب إعادة توقيع حِزمة APK في حال إزالة أيٍّ من المحتويات.
اتصال USB
بشكلٍ تلقائي، يتم ضبط اتصالات الأجهزة عبر منفذ USB على وضع الشحن فقط. للوصول إلى الجهاز ومحتواه عبر اتصال USB، يجب أن يمنح المستخدمون الإذن صراحةً بهذه التفاعلات. إذا كان تطبيقك يتيح تفاعلات المستخدم مع الجهاز عبر منفذ USB، ضَع في اعتبارك أنّه يجب تفعيل التفاعل صراحةً.
تغييرات في برنامج Android for Work
يتضمن هذا الإصدار التغييرات التالية في سلوك Android for Work:
- جهات اتصال العمل في السياقات الشخصية: يعرض سجلّ المكالمات في "أداة الاتصال من Google" الآن جهات اتصال العمل عندما يعرض المستخدم المكالمات السابقة.
يؤدي ضبط
setCrossProfileCallerIdDisabled()
علىtrue
إلى إخفاء جهات اتصال ملف العمل في سجلّ مكالمات Google Dialer. لا يمكن عرض جهات اتصال العمل مع جهات الاتصال الشخصية على الأجهزة عبر البلوتوث إلا إذا ضبطت الخيارsetBluetoothContactSharingDisabled()
علىfalse
. ويتم ضبطها تلقائيًا علىtrue
. - إزالة إعدادات شبكة Wi-Fi: تتم الآن إزالة إعدادات شبكة Wi-Fi التي أضافها مالك الملف الشخصي
(على سبيل المثال، من خلال المكالمات إلى طريقة
addNetwork()
) في حال حذف ملف العمل هذا. - إلغاء تأمين إعدادات Wi-Fi: لا يمكن للمستخدم تعديل أي إعدادات Wi-Fi أنشأها
مالك جهاز نشط أو حذفها إذا
لم تكن قيمة
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN
صفرًا. وسيظل بإمكان المستخدم إنشاء إعدادات Wi-Fi الخاصة به وتعديلها. ويحصل مالكو الأجهزة النشطين على امتياز تعديل أي إعدادات Wi-Fi أو إزالتها، بما في ذلك الإعدادات التي لم ينشئوها. - تنزيل "وحدة التحكّم بسياسة الجهاز" من خلال إضافة حساب Google: عند إضافة حساب Google يتطلب إدارة من خلال تطبيق وحدة التحكّم بسياسة الجهاز (DPC) إلى أحد الأجهزة خارج سياق مُدار، يطلب مسار إضافة الحساب من المستخدم الآن تثبيت خدمة WPC المناسبة. وينطبق هذا السلوك أيضًا على الحسابات التي تمت إضافتها من خلال الإعدادات > الحسابات وفي معالج الإعداد الأوّلي للجهاز.
- التغييرات في سلوكيات معيّنة لواجهة برمجة التطبيقات
DevicePolicyManager
:- يؤثر استدعاء طريقة
setCameraDisabled()
في الكاميرا بالنسبة إلى المستخدم المتصل فقط، ولا يؤثر الاتصال بهذه الطريقة من الملف الشخصي المُدار في تطبيقات الكاميرا التي تعمل على حساب المستخدم الأساسي. - بالإضافة إلى ذلك، تتوفر الطريقة
setKeyguardDisabledFeatures()
الآن لمالكي الملفات الشخصية ولمالكي الأجهزة. - يمكن لمالك الملف الشخصي ضبط قيود قفل المفاتيح التالية:
-
KEYGUARD_DISABLE_TRUST_AGENTS
وKEYGUARD_DISABLE_FINGERPRINT
، اللذان يؤثران في إعدادات قفل الشاشة للمستخدم الرئيسي للملف الشخصي KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS
، ما يؤثر فقط في الإشعارات التي تنشئها التطبيقات في الملف الشخصي المُدار.
-
- تم إيقاف الطريقتَين
DevicePolicyManager.createAndInitializeUser()
وDevicePolicyManager.createUser()
نهائيًا. - تحظر الطريقة
setScreenCaptureDisabled()
الآن أيضًا بنية المساعدة عندما يكون تطبيق المستخدم المحدّد في المقدّمة. EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
أصبحت الآن القيمة التلقائية هي SHA-256. لا تزال خوارزمية SHA-1 متوافقة مع الأنظمة القديمة، ولكن ستتم إزالتها في المستقبل.EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
لا يقبل الآن سوى SHA-256.- تمّت الآن إزالة واجهات برمجة التطبيقات لبرنامج إعداد الجهاز التي كانت متوفّرة في الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات).
- تمت إزالة
EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS
لكي لا يتمكّن الإعداد باستخدام تقنية الربط المزود بتقنية NFC من فتح قفل جهاز محمي بميزة "إعادة الضبط على الإعدادات الأصلية" آليًا. - يمكنك الآن استخدام
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
extra لنقل البيانات إلى تطبيق مالك الجهاز أثناء إعداد الجهاز المُدار باستخدام NFC. - تم تحسين واجهات برمجة التطبيقات في Android for Work لأذونات وقت التشغيل في الإصدار M، بما في ذلك ملفات العمل
و"طبقة المساعدة" وغيرها. لا تؤثر واجهات برمجة التطبيقات الجديدة لأذونات
DevicePolicyManager
في التطبيقات التي تعمل بإصدارات أقدم من Android 10. - عند خروج المستخدمين من الجزء المتزامن من مسار الإعداد الذي يبدأ من خلال
ACTION_PROVISION_MANAGED_PROFILE
أوACTION_PROVISION_MANAGED_DEVICE
intent، يعرض النظام الآن رمز نتيجةRESULT_CANCELED
.
- يؤثر استدعاء طريقة
- التغييرات على واجهات برمجة التطبيقات الأخرى:
- استخدام البيانات: تمت إعادة تسمية فئة
android.app.usage.NetworkUsageStats
NetworkStats
.
- استخدام البيانات: تمت إعادة تسمية فئة
- التغييرات في الإعدادات العامة:
- لم يعُد من الممكن ضبط هذه الإعدادات عبر
setGlobalSettings()
:BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
- يمكن الآن ضبط هذه الإعدادات العامة عبر
setGlobalSettings()
:
- لم يعُد من الممكن ضبط هذه الإعدادات عبر