يقدّم نظام التشغيل Android 11 ميزات وواجهات برمجة تطبيقات جديدة رائعة للمطوّرين. تساعدك الأقسام التالية في التعرّف على ميزات تطبيقاتك والبدء باستخدام واجهات برمجة التطبيقات ذات الصلة.
للحصول على قائمة مفصّلة لواجهات برمجة التطبيقات الجديدة والمعدَّلة والمُزالة، يُرجى قراءة تقرير اختلافات واجهة برمجة التطبيقات. للاطّلاع على تفاصيل عن واجهات برمجة التطبيقات الجديدة، يُرجى الانتقال إلى مرجع واجهة برمجة تطبيقات Android. ويتم تمييز واجهات برمجة التطبيقات الجديدة لسهولة الاطّلاع عليها. لمعرفة الجوانب التي قد تؤثر فيها تغييرات النظام الأساسي في التطبيقات، احرص أيضًا على الاطّلاع على تغييرات سلوك Android 11 للتطبيقات التي تستهدف الإصدار Android R ولجميع التطبيقات، بالإضافة إلى تغييرات الخصوصية.
تجارب جديدة
عناصر التحكم بالأجهزة
يتضمّن Android 11 واجهة برمجة تطبيقات جديدة ControlsProviderService
يمكنك استخدامها لعرض عناصر التحكّم في الأجهزة الخارجية المتصلة. تظهر عناصر التحكّم هذه
ضمن عناصر التحكّم في الجهاز في قائمة "تشغيل/إيقاف" في Android. لمزيد من
المعلومات، يُرجى الاطّلاع على مقالة التحكّم في الأجهزة الخارجية.
عناصر التحكم في الوسائط
يعدّل نظام التشغيل Android 11 طريقة عرض عناصر التحكّم في الوسائط. تظهر عناصر التحكّم في الوسائط بالقرب من الإعدادات السريعة. يتم ترتيب الجلسات من تطبيقات متعددة في لوحة دائرية يمكن التمرير فيها وتتضمّن الجلسات التي يتم تشغيلها على الهاتف، والجلسات البعيدة، مثل تلك التي تم رصدها على الأجهزة الخارجية أو جلسات البث، والجلسات السابقة التي يمكن استئنافها بالترتيب الذي تم تشغيلها به آخر مرة.
يمكن للمستخدمين إعادة تشغيل الجلسات السابقة من لوحة العرض الدوّارة بدون الحاجة إلى بدء التطبيق. وعند بدء التشغيل، يتفاعل المستخدم مع عناصر التحكّم في الوسائط بالطريقة المعتادة.
لمزيد من المعلومات، يُرجى الاطّلاع على عناصر التحكّم في الوسائط.
الشاشات
تحسين التوافق مع شاشات العرض بدون انقطاع
يوفّر نظام التشغيل Android 11 العديد من واجهات برمجة التطبيقات للتوافق مع الشاشات الكاملة، وهي شاشة
تمتد على جانبَي الجهاز. يتم التعامل مع هذه الشاشات على أنّها نوع من
الشاشات التي تتضمّن فتحات للكاميرا. تعرض الآن الطرق الحالية
DisplayCutout
.getSafeInset…()
الجزء المضمّن الآمن لتجنّب مناطق العرض بدون انقطاع، بالإضافة إلى الأجزاء المقتطعة.
لعرض محتوى تطبيقك في منطقة العرض الإعلاني بدون انقطاع، اتّبِع الخطوات التالية:
يُرجى الاتصال برقم
DisplayCutout.getWaterfallInsets()
للحصول على الأبعاد الدقيقة للعنصر المضمّن في العرض الإعلاني بدون انقطاع.اضبط سمة تنسيق النافذة
layoutInDisplayCutoutMode
علىLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
للسماح للنافذة بالامتداد إلى مناطق الصورة المقطوعة وعرض الفيديو بدون انقطاع على جميع حواف الشاشة. يجب التأكّد من عدم تضمين أي محتوى أساسي في مناطق القطع أو المناطق التي تظهر فيها الإعلانات بدون انقطاع.
أداة استشعار زاوية المفصل والأجهزة القابلة للطي
يتيح نظام التشغيل Android 11 للتطبيقات التي تعمل على
الأجهزة التي تتضمّن إعدادات شاشة مستندة إلى المفصل تحديد ∡المفصل من خلال توفير أداة استشعار جديدة
تتضمّن TYPE_HINGE_ANGLE
،
وSensorEvent
جديدة يمكنها رصد∡المفصل وتقديم قياس بالدرجات بين
جزءَين أساسيَين من الجهاز. يمكنك استخدام هذه القياسات الأولية لتنفيذ مؤثرات متحركة فائقة الدقة أثناء تحرّك المستخدم للجهاز.
راجِع الأجهزة القابلة للطي.
المحادثات
تحسينات على المحادثات
يقدّم نظام التشغيل Android 11 عددًا من التحسينات على طريقة التعامل مع المحادثات. المحادثات هي تواصل ثنائي الاتجاه في الوقت الفعلي بين شخصَين أو أكثر. يتم منح هذه المحادثات أهمية خاصة، ويتوفّر للمستخدمين عدة خيارات جديدة للتفاعل معها.
لمزيد من المعلومات عن المحادثات وكيفية إتاحة تطبيقك لها، يُرجى الاطّلاع على الأشخاص والمحادثات.
فقاعات المحادثة
تتوفّر الفقاعات الآن للمطوّرين لمساعدة في إظهار المحادثات في جميع أنحاء النظام. كانت ميزة "فقاعات الدردشة" ميزة تجريبية في Android 10 تم تفعيلها من خلال أحد خيارات المطوّرين، ولكن لم تعُد هذه الميزة ضرورية في Android 11.
إذا كان التطبيق يستهدف الإصدار 11 من Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، لن يتم عرض إشعاراته كفقاعات ما لم تستوفِ متطلبات المحادثات الجديدة. وعلى وجه التحديد، يجب أن يكون الإشعار مرتبطًا باختصار.
قبل الإصدار 11 من نظام التشغيل Android، إذا أردت عرض إشعار في شكل فقاعة، كان عليك تحديدًا تحديد أنّه تم ضبط الإشعار ليبدأ دائمًا في وضع واجهة مستخدم المستند. بدءًا من الإصدار 11 من نظام التشغيل Android، لم تعُد بحاجة إلى إجراء هذا الإعداد صراحةً. إذا تم تجميع الإشعار في فقاعة، سيضبط النظام الأساسي تلقائيًا الإشعار لتشغيله دائمًا في وضع واجهة مستخدم المستند.
تم إجراء عدد من التحسينات على أداء الفقاعات، وأصبح لدى المستخدمين قدر أكبر من المرونة في تفعيل الفقاعات وإيقافها من كل تطبيق. بالنسبة إلى المطوّرين الذين نفّذوا الإصدار التجريبي، تم إجراء بعض التغييرات على واجهات برمجة التطبيقات في Android 11:
- تم إيقاف الأسلوب البادئ
BubbleMetadata.Builder()
بدون معلَمات نهائيًا. بدلاً من ذلك، استخدِم أيًا من وظيفتَي الإنشاء الجديدتَينBubbleMetadata.Builder(PendingIntent, Icon)
أوBubbleMetadata.Builder(String)
. - أنشئ
BubbleMetadata
من رقم تعريف اختصار من خلال الاتصال بالرقمBubbleMetadata.Builder(String)
. يجب أن تتطابق السلسلة التي تم تمريرها مع معرّف الاختصار المقدَّم إلىNotification.Builder
. - أنشئ رموز الفقاعات باستخدام
Icon.createWithContentUri()
، أو باستخدام الطريقة الجديدةcreateWithAdaptiveBitmapContentUri()
.
المؤشرات المرئية لشبكة الجيل الخامس
للحصول على معلومات عن عرض مؤشرات شبكة الجيل الخامس على أجهزة المستخدمين، يُرجى الاطّلاع على مقالة إعلام المستخدمين عند استخدام شبكة الجيل الخامس.
الخصوصية
يقدّم نظام Android 11 عددًا كبيرًا من التغييرات والقيود لتعزيز خصوصية المستخدم. لمزيد من المعلومات، يُرجى الاطّلاع على صفحة الخصوصية.
الأمان
تعديلات على المصادقة بالمقاييس الحيوية
لمساعدتك في التحكّم في مستوى أمان بيانات تطبيقك، يقدّم نظام Android 11 العديد من التحسينات على مصادقة باستخدام ميزات الأمان البيومتري. تظهر هذه التغييرات أيضًا في مكتبة برمجية biometric Jetpack.
أنواع المصادقة
يقدّم نظام التشغيل Android 11 واجهة
BiometricManager.Authenticators
التي يمكنك استخدامها للإعلان عن أنواع المصادقة التي يتيح
تطبيقك استخدامها.
تحديد نوع المصادقة المستخدَم
بعد مصادقة المستخدم، يمكنك التحقّق مما إذا كان المستخدم قد تمّت مصادقة باستخدام
بيانات اعتماد الجهاز أو بيانات اعتماد المقاييس الحيوية من خلال الاتصال بالرقم
getAuthenticationType()
.
دعم إضافي لمفاتيح المصادقة عند الاستخدام
يقدّم نظام التشغيل Android 11 المزيد من الدعم للمصادقة باستخدام مفاتيح مصادقة لكل استخدام.
الطرق المتوقّفة
سيتوقف نظام التشغيل Android 11 عن استخدام الطرق التالية:
- طريقة
setDeviceCredentialAllowed()
- طريقة
setUserAuthenticationValidityDurationSeconds()
- النسخة المُحمَّلة من
canAuthenticate()
التي لا تأخذ أي وسيطات.
مشاركة مجموعات البيانات الكبيرة بأمان
في بعض الحالات، مثل الحالات التي تتضمّن تعلُّم الآلة أو تشغيل الوسائط، قد يحتاج تطبيقك إلى استخدام مجموعة البيانات الكبيرة نفسها التي يستخدمها تطبيق آخر. في الإصدارات السابقة من Android، كان على تطبيقك وتطبيق آخر تنزيل نسخة منفصلة من مجموعة البيانات نفسها.
للمساعدة في تقليل تكرار البيانات، سواء على الشبكة أو على القرص، يسمح الإصدار Android 11 بتخزين هذه المجموعات الكبيرة من البيانات مؤقتًا على الجهاز باستخدام مجموعات البيانات المشترَكة. للاطّلاع على مزيد من المعلومات عن مشاركة مجموعات البيانات، اطّلِع على الدليل المفصّل حول مشاركة مجموعات البيانات الكبيرة.
تنفيذ التشفير المستند إلى الملفات بعد إعادة التشغيل عبر الهواء بدون بيانات اعتماد المستخدم
بعد اكتمال تحديث الجهاز عبر الهواء وإعادة تشغيله، تصبح مفاتيح التشفير المستند إلى الملفات (FBE) التي تم وضعها في مساحة التخزين المحمية ببيانات الاعتماد متاحة على الفور لإجراء عمليات التشفير المستند إلى الملفات (FBE). وهذا يعني أنّه بعد تحديث عبر الهواء، يمكن لتطبيقك استئناف العمليات التي تتطلّب مفاتيح CE قبل أن يُدخل المستخدم رقم التعريف الشخصي أو النقش أو كلمة المرور.
الأداء والجودة
تصحيح الأخطاء اللاسلكي
يتيح نظام التشغيل Android 11 نشر تطبيقك وتصحيح أخطاءه لاسلكيًا من محطة العمل عبر أداة Android Debug Bridge (adb). على سبيل المثال، يمكنك نشر تطبيقك القابل لتصحيح الأخطاء على أجهزة عن بُعد متعددة بدون توصيل جهازك عبر USB والتعامل مع المشاكل الشائعة في اتصال USB، مثل تثبيت برنامج التشغيل. لمزيد من المعلومات، يُرجى الاطّلاع على تشغيل التطبيقات على جهاز أجهزة.
تثبيت حِزم APK المتزايدة باستخدام أداة ADB
يمكن أن يستغرق تثبيت حِزم APK الكبيرة (التي تزيد عن 2 غيغابايت) على جهاز وقتًا طويلاً، حتى إذا تم إجراء تغيير بسيط فقط على التطبيق. ويؤدي تثبيت حِزم APK المتزايدة باستخدام أداة ADB (Android Debug Bridge) إلى تسريع هذه العملية من خلال تثبيت جزء كافٍ من حزمة APK لتشغيل التطبيق أثناء بث البيانات المتبقية في الخلفية. سيستخدم تطبيق adb install
هذه الميزة تلقائيًا إذا كان الجهاز يتيح ذلك وكان لديك
أحدث إصدار من أدوات حزمة تطوير البرامج (SDK) مثبّتًا. إذا كانت
غير متوافقة، يتم استخدام طريقة التثبيت التلقائية بدون إشعار.
استخدِم أمر adb التالي لاستخدام الميزة. إذا كان الجهاز لا يتيح التثبيت المتزايد، يفشل الأمر ويطبع شرحًا مفصّلاً.
adb install --incremental
قبل تشغيل عملية تثبيت APK متزايدة باستخدام أداة ADB، عليك توقيع حزمة APK وإنشاء ملف الإصدار 4 من مخطّط توقيع حزمة APK. يجب وضع ملف التوقيع بالإصدار 4 بجانب حزمة APK لكي تعمل هذه الميزة.
رصد الأخطاء باستخدام أداة تخصيص الذاكرة الأصلية
GWP-ASan هي ميزة مخصّصة لتوزيع الذاكرة تساعد في العثور على أخطاء استخدام ذاكرة معيّنة بعد تفريغها (Use-After-Free) وتجاوز سعة المخزن المؤقت للذاكرة الديناميكية (Heap-Buffer-Overflow). يمكنك تفعيل هذه الميزة على مستوى التطبيق أو لعمليات فرعية معيّنة فيه. لمزيد من المعلومات، اطّلِع على دليل GWP-Asan.
Neural Networks API 1.3
يوسّع نظام التشغيل Android 11 نطاق Neural Networks API (NNAPI) ويُجري تحسينات عليه.
عمليات جديدة
يقدّم الإصدار 1.3 من NNAPI نوعًا جديدًا من المُشغِّلات، وهو TENSOR_QUANT8_ASYMM_SIGNED
، لتوفير
دعم لمخطّط التكثيف الجديد في TensorFlow Lite.
بالإضافة إلى ذلك، يقدّم الإصدار 1.3 من NNAPI العمليات الجديدة التالية:
QUANTIZED_LSTM
IF
WHILE
ELU
HARD_SWISH
FILL
RANK
عناصر التحكّم الجديدة في تعلُّم الآلة
يقدّم NNAPI 1.3 عناصر تحكّم جديدة للمساعدة في تشغيل تعلُّم الآلة بسلاسة:
واجهة برمجة التطبيقات لجودة الخدمة: تتيح واجهة برمجة التطبيقات الجديدة لجودة الخدمة إمكانية تحديد الأولويات والمواعيد النهائية للمهام في NNAPI باستخدام الوظائف الجديدة التالية:
إدخال/إخراج نطاق الذاكرة: يتيح NNAPI 1.3 استخدام نطاقات الذاكرة كإدخال وإخراج لتنفيذ العمليات. يؤدي ذلك إلى إزالة النُسخ غير الضرورية من البيانات نفسها بين مكونات النظام المختلفة، ما يؤدي إلى تحسين أداء وقت التشغيل لشبكة الشبكات العصبية في Android. تضيف هذه الميزة مجموعة من واجهات برمجة التطبيقات الجديدة في NDK لاستخدامها مع كائنَي
ANeuralNetworksMemoryDesc
وANeuralNetworkMemory
، بما في ذلك الدوالّ التالية:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
لمزيد من المعلومات، اطّلِع على نطاق ذاكرة الشبكة العصبية عيّنة.
دعم Dependency API وSync Fence: يتضمّن NNAPI 1.3 دعمًا لعمليات المعالجة غير المتزامنة التي تتضمّن عناصر تابعة، ما يسمح بتقليل الوقت المستغرَق بشكل كبير عند تنفيذ نماذج صغيرة متسلسلة. تضيف هذه الميزة الوظائف الجديدة التالية:
تدفق التحكم: يشمل الإصدار NNAPI 1.3 إمكانية التدفق العام للتحكُّم من خلال عمليتَي الرسم البياني
ANEURALNETWORKS_IF
وANEURALNETWORKS_WHILE
اللتين تقبلان النماذج الأخرى كوسيطات باستخدام نوع المعاملANEURALNETWORKS_MODEL
الجديد. بالإضافة إلى ذلك، تضيف هذه الميزة الوظائف الجديدة التالية:
NDK Thermal API
عندما ترتفع درجة حرارة الأجهزة بشكل كبير، قد تبطئ وحدة المعالجة المركزية و/أو وحدة معالجة الرسومات، ويمكن أن يؤدي ذلك إلى التأثير في التطبيقات بطرق غير متوقّعة. من المرجّح أن تواجه التطبيقات أو الألعاب التي تتضمّن رسومات معقدة أو عمليات حسابية مكثّفة أو نشاطًا متواصلاً على الشبكة مشاكل.
استخدِم واجهة برمجة التطبيقات NDK Thermal API في Android 11 لمراقبة تغييرات درجة الحرارة على الجهاز، ثم اتّخِذ إجراءً للحفاظ على انخفاض استهلاك الطاقة ودرجة حرارة الجهاز. تشبه واجهة برمجة التطبيقات هذه Java Thermal API، ويمكنك استخدامها لتلقّي إشعارات بشأن أي تغيير في الحالة الحرارية أو للاستعلام عن الحالة الحالية مباشرةً.
النص والإدخال
عمليات النقل المحسّنة لنظام IME
يقدّم نظام التشغيل Android 11 واجهات برمجة تطبيقات جديدة لتحسين عمليات النقل في برامج تعديل طريقة الإدخال (IME)، مثل لوحات المفاتيح الظاهرة على الشاشة. تسهِّل واجهات برمجة التطبيقات هذه تعديل محتوى تطبيقك بالتزامن مع ظهور واجهة IME واختفائها، وغيرها من العناصر، مثل شريطَي الحالة والتنقّل.
لإظهار IME عندما يكون أي EditText
قيد التركيز، اتصل برمز
view.getInsetsController().show(Type.ime())
.
(يمكنك استدعاء هذه الطريقة في أي عرض فيالتدرّج الهرمي نفسه للعنصر EditText
الذي تم التركيز عليه، وليس عليك استدعاؤها فيEditText
تحديدًا). لإخفاء ميزة IME، اتصل بالرقم
view.getInsetsController().hide(Type.ime())
.
يمكنك التحقّق مما إذا كان IME مرئيًا حاليًا من خلال الاتصال بالرقم
view.getRootWindowInsets().isVisible(Type.ime())
.
لمزامنة طرق عرض تطبيقك مع ظهور واجهة IME واختفائها، يمكنك ضبط مستمع على طريقة عرض من خلال تقديم
WindowInsetsAnimation.Callback
إلى View.setWindowInsetsAnimationCallback()
.
(يمكنك ضبط هذا المستمع على أي عرض، ولا يجب أن يكون EditText
.)
يُطلِق IME طريقة
onPrepare()
المستمع، ثم يُطلِق
onStart()
في بداية عملية النقل. بعد ذلك، يتم استدعاء
onProgress()
في كل مرحلة من مراحل الانتقال. عند انتهاء عملية النقل، يُطلِق IME onEnd()
.
في أيّ وقت من عملية النقل، يمكنك معرفة مستوى التقدّم الذي أحرزته عملية النقل من خلال الاتصال بالرقم
WindowInsetsAnimation.getFraction()
.
للاطّلاع على مثال على كيفية استخدام واجهات برمجة التطبيقات هذه، يمكنك الاطّلاع على رمز برمجي نموذجي جديد لـ WindowInsetsAnimation.
التحكّم في الصورة المتحركة لطريقة إدخال النص
يمكنك أيضًا التحكّم في المؤثر الحركي لطريقة إدخال النص أو المؤثر الحركي لشريط نظام آخر، مثل شريط التنقّل. لإجراء ذلك، عليك أولاً استدعاء
setOnApplyWindowInsetsListener()
لضبط مستمع جديد لتغييرات نافذة الحشو:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
لنقل IME أو شريط نظام آخر، يمكنك استدعاء controlWindowInsetsAnimation()
طريقة وحدة التحكّم:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
تعديلات على مكتبات ICU
يُعدِّل نظام التشغيل Android 11 حزمة android.icu
لاستخدام الإصدار 66
من
مكتبة ICU، مقارنةً بالإصدار
63 في Android 10. يتضمّن الإصدار الجديد من المكتبة بيانات لغة CLDR المعدَّلة
وعددًا من التحسينات على ميزة استخدام العناوين العالمية في Android.
تشمل التغييرات البارزة في نُسخ المكتبة الجديدة ما يلي:
- تتيح الآن العديد من واجهات برمجة التطبيقات لتنسيق البيانات نوعًا جديدًا من عناصر العرض يمتد من
FormattedValue
. - تم تحسين واجهة برمجة التطبيقات
LocaleMatcher
API من خلال إضافة فئة "أداة إنشاء" وتوافق مع النوعjava.util.Locale
وفئة نتيجة تعرض بيانات إضافية عن المطابقة. - أصبح معيار Unicode 13 متوافقًا الآن.
الوسائط
تخصيص وحدات تخزين مؤقتة في MediaCodec
يتضمّن Android 11 واجهات برمجة تطبيقات MediaCodec
جديدة تمنح
التطبيقات مزيدًا من التحكّم عند تخصيص ذاكرة التخزين المؤقت للمدخلات والمخرجات. يتيح ذلك لتطبيقك إدارة الذاكرة بكفاءة أكبر.
الصفوف الجديدة:
الطرق الجديدة:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
بالإضافة إلى ذلك، تغيّر سلوك طريقتَين في MediaCodec.Callback()
:
onInputBufferAvailable()
- بدلاً من استدعاء
MediaCodec.getInputBuffer()
وMediaCodec.queueInputBuffer()
مع الفهرس، إذا تم ضبط التطبيقات لاستخدام واجهة برمجة التطبيقات Block Model API، يجب أن تستخدم التطبيقاتMediaCodec.getQueueRequest
مع الفهرس، مع إرفاق LinearBlock/HardwareBuffer بالفتحة. onOutputBufferAvailable()
- بدلاً من استدعاء
MediaCodec.getOutputBuffer()
مع الفهرس، قد تستخدِم التطبيقاتMediaCodec.getOutputFrame()
مع الفهرس للحصول علىOutputFrame
العنصر مع المزيد من المعلومات ووحدات تخزين LinearBlock/HardwareBuffer.
فك الترميز بوقت استجابة منخفض في MediaCodec
يُحسِّن نظام التشغيل Android 11
MediaCodec
لتوفير ميزة فك التشفير بسرعة منخفضة للألعاب والتطبيقات الأخرى التي تعمل في الوقت الفعلي. يمكنك معرفة ما إذا كان برنامج الترميز يتيح فك التشفير بوقت استجابة منخفض من خلال تمرير FEATURE_LowLatency
إلى MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
لتفعيل ميزة "فك التشفير بوقت استجابة منخفض" أو إيقافها، يمكنك اتّخاذ أيّ من الإجراءَين التاليَين:
- اضبط المفتاح الجديد
KEY_LOW_LATENCY
على 0 أو 1 باستخدامMediaCodec.configure()
. - اضبط مفتاح المَعلمة الجديد
PARAMETER_KEY_LOW_LATENCY
على 0 أو 1 باستخدامMediaCodec.setParameters()
.
دالة AAudio الجديدة AAudioStream_release()
تؤدي الدالة
AAudioStream_close()
إلى إيقاف بث صوتي وإغلاقه في الوقت نفسه. قد يكون هذا الإجراء خطيرًا. إذا حاولت عملية أخرى الوصول إلى البث بعد إغلاقه، ستتعطّل العملية.
تُطلق الدالة الجديدة
AAudioStream_release()
البثّ بدون إغلاقه. يؤدي ذلك إلى تحرير موارده وترك البث في حالة معروفة. يستمر ظهور العنصر إلى أن يتم استدعاء
AAudioStream_close()
.
MediaParser API
MediaParser هي واجهة برمجة تطبيقات جديدة من المستوى الأدنى لأجل استخراج الوسائط. وهي أكثر مرونة من MediaExtractor وتوفّر بدورها إمكانية تحكّم إضافية في وظيفة استخراج الوسائط.
تسجيل الصوت من جهاز USB
عندما يستخدم تطبيق لا يملك إذن RECORD_AUDIO
UsbManager
لطلب الوصول المباشر إلى جهاز صوت USB مزوّد بميزة تسجيل الصوت (مثل سماعة رأس USB)، تظهر رسالة تحذير جديدة تطلب من
المستخدم تأكيد الإذن لاستخدام الجهاز. يتجاهل النظام أي خيار "استخدام
دائم"، لذا على المستخدم الموافقة على التحذير ومنح الإذن في كل
مرة يطلب فيها أحد التطبيقات الوصول إلى البيانات.
لتجنُّب هذا السلوك، يجب أن يطلب تطبيقك إذن RECORD_AUDIO
.
الوصول المتزامن إلى الميكروفون
يضيف الإصدار 11 من Android طُرقًا جديدة لواجهات برمجة التطبيقات AudioRecord
وMediaRecorder
و
AAudioStream
. تفعِّل هذه الطرق إمكانية الالتقاط بشكل متزامن وتوقِفها
بغض النظر عن حالة الاستخدام المحدّدة. راجِع مقالة مشاركة إدخال الصوت.
أداة التبديل بين أجهزة التشغيل
ينفِّذ نظام Android 11 سلوكًا جديدًا للتطبيقات التي تستخدم واجهتَي برمجة التطبيقات cast وmediarouter.
بالإضافة إلى الوصول إلى خيارات البث من داخل أحد التطبيقات، تظهر خيارات التبديل أيضًا في مشغّل وسائط النظام. يساعد ذلك في منح المستخدم تجربة سلسة عند التنقل بين الأجهزة أثناء تغيير سياقات المشاهدة والمواد التي يتم الاستماع إليها، مثل مشاهدة الفيديو في المطبخ بدلاً من الهاتف، أو الاستماع إلى الصوت في المنزل أو السيارة. اطّلِع على أداة التبديل بين أجهزة التشغيل.
إمكانية الاتصال
تحسينات "نقطة مرور Wi-Fi"
للحصول على معلومات عن إمكانات Passpoint التي تمت إضافتها في Android 11، يُرجى الاطّلاع على مقالة Passpoint.
توسيع نطاق واجهة برمجة التطبيقات لاقتراحات Wi-Fi
يوسّع نظام التشغيل Android 11 نطاق استخدام Wi-Fi Suggestion API لزيادة إمكانات إدارة الشبكة في تطبيقك، بما في ذلك ما يلي:
- يمكن لتطبيقات إدارة الاتصال إدارة شبكاتها الخاصة من خلال السماح بطلبات الانفصال.
- يتم دمج شبكات Passpoint في واجهة برمجة التطبيقات Suggestion API ويمكن اقتراحها على المستخدم.
- تتيح لك واجهات برمجة تطبيقات "إحصاءات Google" الحصول على معلومات عن جودة شبكاتك.
تعديلات على CallScreeningService
بدءًا من الإصدار 11 من Android، يمكن لتطبيق CallScreeningService طلب معلومات عن حالة التحقّق من STIR/SHAKEN (verstat) للمكالمات القادمة. يتم تقديم هذه المعلومات كجزء من تفاصيل المكالمات للمكالمات الواردة.
إذا كان CallScreeningService
يملك الإذن
READ_CONTACTS
، يتم إرسال إشعار إلى التطبيق عند تلقّي مكالمات واردة من رقم في جهات اتصال المستخدم أو عند إجراء مكالمات خارجه.
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة منع usurpation للمعرّف المتصل.
تحديثات Open Mobile API
للحصول على معلومات حول توافق OMAPI على Android 11 والإصدارات الأحدث، يُرجى الاطّلاع على توافق Open Mobile API reader.
شبكات VPN عالية الأداء
يمكن للتطبيقات التي تستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات أو التي تعمل على الأجهزة التي تم تشغيلها بالمستوى 29 أو أعلى لواجهة برمجة التطبيقات تطبيق بروتوكول IKEv2/IPsec على الشبكات الافتراضية الخاصة (VPN) للشبكات الافتراضية الخاصة التي يضبطها المستخدم والشبكات الافتراضية الخاصة المستندة إلى التطبيقات.
تعمل شبكات VPN بشكل أصلي مع نظام التشغيل، ما يبسط الرمز البرمجي المطلوب لبدء اتصالات شبكة VPN باستخدام بروتوكول IKEv2/IPsec في أحد التطبيقات.
التحكّم في الوصول إلى الشبكة لكل عملية
للحصول على معلومات عن تفعيل الوصول إلى الشبكة لكل عملية على حدة، يُرجى الاطّلاع على إدارة استخدام الشبكة.
السماح بإعدادات متعددة تم تثبيتها من Passpoint باستخدام الاسم الكامل وعنوان النطاق (FQDN) نفسه
اعتبارًا من Android 11، يمكنك استخدام
PasspointConfiguration.getUniqueId()
للحصول على معرّف فريد لعنصر PasspointConfiguration
، ما يتيح
لمستخدمي تطبيقك تثبيت عدة ملفات تعريف باستخدام اسم النطاق المؤهَّل بالكامل (FQDN) نفسه.
تكون هذه الوظيفة مفيدة عندما ينشر مشغّل شبكة الجوّال أكثر من تركيبة واحدة من رمز البلد (MCC) ورمز شبكة الجوّال (MNC) على شبكته، ولكن لديه FQDN واحد فقط. في الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث، من الممكن تثبيت أكثر من ملف شخصي باستخدام عنوان FQDN نفسه الذي سيطابق الشبكة بصفتها مقدّم خدمة Home عندما يُثبِّت المستخدم شريحة SIM تتضمّن إما رقم تعريف مشغل شبكة الجوّال (MCC) أو رقم تعريف شبكة الجوّال (MNC).
إتاحة هوائيات نظام تحديد المواقع العالمي (GNSS)
يقدّم الإصدار 11 من Android فئة
GnssAntennaInfo
، ما يتيح
لتطبيقك الاستفادة بشكل أكبر من تحديد الموقع الجغرافي بدقة تصل إلى سنتيمتر يمكن أن يوفّره
نظام تحديد المواقع العالمي عبر الأقمار الصناعية (GNSS).
اطّلِع على المزيد من المعلومات في دليل معلومات معايرة الهوائي.
الرسومات
أداة فك ترميز الصور في NDK
توفّر واجهة برمجة التطبيقات ImageDecoder
في حزمة NDK واجهة برمجة تطبيقات
عادية لتطبيقات Android المكتوبة بلغة C/C++ لفك ترميز الصور مباشرةً. لم يعد مطوّرو التطبيقات بحاجة إلى استخدام واجهات برمجة تطبيقات الإطار (من خلال JNI) أو تجميع مكتبات تابعة لجهات خارجية لفك ترميز الصور. لمزيد من المعلومات، يُرجى الاطّلاع على
دليل المطوّر الخاص ببرنامج فك ترميز الصور.
Frame rate API
يقدّم الإصدار 11 من نظام التشغيل Android واجهة برمجة تطبيقات تتيح للتطبيقات إبلاغ النظام بعدد اللقطات في الثانية المطلوب، وذلك لتقليل الارتعاش على الأجهزة التي تتيح معدّلات إعادة شاشة متعددة. للحصول على معلومات حول كيفية استخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على دليل معدّل عرض اللقطات.
طلب إتاحة وقت استجابة منخفض والتحقّق من ذلك
يمكن لبعض الشاشات إجراء عمليات ما بعد المعالجة للرسومات، مثل بعض الشاشات الخارجية والتلفزيونات. تعمل هذه المعالجة اللاحقة على تحسين الرسومات، ولكن يمكن أن يؤدي ذلك إلى زيادة وقت الاستجابة. إنّ أجهزة العرض الأحدث التي تتيح استخدام HDMI 2.1 تتضمّن وضع خفض وقت الاستجابة تلقائيًا (ALLM، المعروف أيضًا باسم وضع الألعاب)، والذي يقلل من وقت الاستجابة عن طريق إيقاف هذه المعالجة اللاحقة. لمزيد من التفاصيل حول ALLM، يُرجى الرجوع إلى مواصفات HDMI 2.1.
يمكن للنافذة طلب استخدام وضع وقت الاستجابة المنخفض التلقائي، إذا كان متاحًا. يُعدّ وضع ALLM مفيدًا بشكل خاص لتطبيقات مثل الألعاب واجتماعات الفيديو، حيث يكون وقت الاستجابة المنخفض أكثر أهمية من الحصول على أفضل الرسومات الممكنة.
لتفعيل الحد الأدنى من المعالجة اللاحقة أو إيقافه، استخدِم الإجراء
Window.setPreferMinimalPostProcessing()
،
أو اضبط سمة
preferMinimalPostProcessing
النافذة على true
. لا تتيح بعض الشاشات استخدام الحد الأدنى من
المعالجة اللاحقة. لمعرفة ما إذا كانت شاشة معيّنة تتيح ذلك، يمكنك استدعاء
الطريقة الجديدة
Display.isMinimalPostProcessingSupported()
.
إدراج طبقة تصحيح أخطاء الرسومات العالية الأداء
يمكن للتطبيقات الآن تحميل طبقات الرسومات الخارجية (GLES، Vulkan) في رمز التطبيق الأصلي لتوفير الوظائف نفسها التي يوفّرها التطبيق القابل لتصحيح الأخطاء، ولكن بدون التأثير على الأداء. وتُعدّ هذه الميزة مهمة بشكل خاص عند إنشاء ملف شخصي لتطبيقك باستخدام أدوات مثل GAPID. لإنشاء ملف تعريف قياس أداء تطبيقك، أدرِج عنصر البيانات الوصفية التالي في ملف بيان تطبيقك بدلاً من إتاحة تصحيح أخطاء التطبيق:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
الصور والكاميرا
كتم صوت الإشعارات والاهتزازات أثناء التصوير النشط
بدءًا من الإصدار 11 من نظام التشغيل Android، عند استخدام الكاميرا بشكل نشط، يمكن لتطبيقك كتم صوت الاهتزاز فقط أو الصوت والاهتزاز معًا أو لا يمكنه كتم أي منهما باستخدام رمز
setCameraAudioRestriction()
.
توسيع نطاق توافق الكاميرا في محاكي Android
للحصول على معلومات عن التوافق الموسّع للكاميرات في المحاكي بدءًا من Android 11، يُرجى الاطّلاع على التوافق مع الكاميرا.
إتاحة استخدام أكثر من كاميرا في الوقت نفسه
يضيف الإصدار 11 من نظام التشغيل Android واجهات برمجة تطبيقات للاستعلام عن إمكانية استخدام أكثر من كاميرا واحدة في الوقت نفسه، بما في ذلك الكاميرا الأمامية والخلفية.
للتحقّق من توفّر الميزة على الجهاز الذي يعمل عليه تطبيقك، استخدِم الخطوات التالية:
- تُعرِض دالة
getConcurrentCameraIds()
Set
من مجموعات أرقام تعريف الكاميرات التي يمكنها البث بشكل متزامن مع مجموعات بث مضمونة عند ضبطها من خلال عملية التطبيق نفسها. - يطلب
isConcurrentSessionConfigurationSupported()
معرفة ما إذا كانت أجهزة الكاميرا متوافقة مع إعدادات جلسة البث المقابلة بشكل متزامن.
تحسين التوافق مع صور HEIF التي تحتوي على إطارات متعددة
بدءًا من Android 11، إذا استدعيت ImageDecoder.decodeDrawable()
وتمرير صورة HEIF تحتوي على تسلسل من اللقطات (مثل صورة متحركة أو صورة متسلسلة)، ستُرجع الطريقة AnimatedImageDrawable
يحتوي على تسلسل الصور بالكامل. في الإصدارات السابقة من Android، كانت الطريقة تُرجع BitmapDrawable
من إطار واحد فقط.
إذا كان الرسم البياني بتنسيق HEIF يتضمّن عدة لقطات غير متسلسلة، يمكنك استرداد لقطة فردية من خلال استدعاء MediaMetadataRetriever.getImageAtIndex()
.
تسهيل الاستخدام
تعديلات تهمّ مطوّري خدمات تسهيل الاستخدام
إذا أنشأت خدمة تسهيل استخدام مخصّصة، يمكنك استخدام ميزات التالية في Android 11:
- يتيح الآن الشرح الموجَّه للمستخدمين حول خدمة تسهيل الاستخدام استخدام التنسيق HTML والصور بالإضافة إلى النص العادي. وتُسهِّل هذه المرونة شرح ما تفعله خدمتك للمستخدمين النهائيين وكيفية مساعدتهم.
- للعمل مع وصف لحالة عنصر واجهة المستخدم يكون أكثر تعبيرية
من
contentDescription
، يمكنك استدعاء الطريقةgetStateDescription()
. - لطلب تجاوز أحداث اللمس لاستكشاف اللمس في النظام، اتصل بالرقم
setTouchExplorationPassthroughRegion()
. وبالمثل، لطلب أن تتجاوز الإيماءات أداة رصد الإيماءات في النظام، اتصل بالرقمsetGestureDetectionPassthroughRegion()
. - يمكنك طلب إجراءات IME، مثل "enter" و"next"، بالإضافة إلى
لقطات شاشة للنوافذ التي لا تفعّل العلامة
FLAG_SECURE
.
ميزات إضافية
أسباب إنهاء عملية التطبيق
يقدّم نظام التشغيل Android 11 طريقة
ActivityManager.getHistoricalProcessExitReasons()
التي تُبلغ عن أسباب أي عمليات إنهاء حديثة. يمكن للتطبيقات
استخدام هذه الطريقة لجمع معلومات تشخيص الأعطال، مثل ما إذا كان
إنهاء العملية بسبب أخطاء ANR أو مشاكل في الذاكرة أو لأسباب أخرى.
بالإضافة إلى ذلك، يمكنك استخدام الطريقة الجديدة
setProcessStateSummary()
لتخزين معلومات الحالة المخصّصة لتحليلها لاحقًا.
تُعرِض طريقة getHistoricalProcessExitReasons()
نُسخًا من فئة
ApplicationExitInfo
التي تحتوي على معلومات متعلّقة بإيقاف عملية التطبيق. من خلال استدعاء
getReason()
على مثيل من هذه الفئة، يمكنك تحديد سبب إنهاء عملية
تطبيقك. على سبيل المثال، تشير قيمة الإرجاع REASON_CRASH
إلى أنّه حدث استثناء لم تتم معالجته في تطبيقك. إذا كان تطبيقك بحاجة إلى ضمان تميّز أحداث الخروج، يمكنه الاحتفاظ بمعرّف خاص بالتطبيق، مثل قيمة التجزئة استنادًا إلى الطابع الزمني من الأسلوب
getTimestamp()
.
مصادر إضافية
لمزيد من المعلومات، يُرجى قراءة المقالة حول أدوات Android 11 الجديدة لجعل التطبيقات أكثر خصوصية و استقرارًا على Medium.
أدوات تحميل الموارد
يقدّم نظام التشغيل Android 11 واجهة برمجة تطبيقات جديدة تتيح للتطبيقات dynamikalemد نطاق البحث عن الموارد وتحميلها. تتحمّل فئات واجهة برمجة التطبيقات الجديدة
ResourcesLoader
و
ResourcesProvider
المسؤولية الأساسية عن توفير الوظائف الجديدة. ويوفّر كلاهما معًا إمكانية تقديم موارد ومواد عرض إضافية أو تعديل قيم الموارد ومواد العرض الحالية.
عناصر ResourcesLoader
هي حاويات توفّر عناصر ResourcesProvider
لمثيل Resources
في التطبيق. بدورها، توفر عناصر ResourcesProvider
طرقًا لتحميل بيانات الموارد من APKs وجداول الموارد.
من حالات الاستخدام الأساسية لواجهة برمجة التطبيقات هذه هي تحميل مواد العرض المخصّصة. يمكنك استخدام
loadFromDirectory()
لإنشاء ResourcesProvider
يعيد توجيه درجة دقة موارد ومقتَطعات برمجية مستندة إلى الملفات، ما يؤدي إلى البحث في دليل معيّن بدلاً من ملف APK للتطبيق. يمكنك الوصول إلى مواد العرض هذه من خلال مجموعة طُرق open()
من فئة AssetManager
واجهة برمجة التطبيقات، تمامًا كما هو الحال مع مواد العرض المجمّعة في حِزمة APK.
الإصدار 4 من مخطّط توقيع حِزم APK
يتيح نظام التشغيل Android 11 استخدام الإصدار 4 من مخطّط توقيع حِزم APK. يُنشئ هذا المخطّط نوعًا جديدًا من التوقيع في ملف منفصل (apk-name.apk.idsig
)، ولكنه يشبه الإصدارَين 2 و3 من حيث الأداء. لا يتم إجراء أي تغييرات على حزمة APK. يتيح هذا المخطّط
تثبيت APK المتزايد باستخدام أداة ADB، ما يسرع من عملية تثبيت حزمة APK.
فلاتر الأهداف الديناميكية
لتلقّي النوايا، يجب أن يعلن التطبيق في وقت الترجمة عن أنواع البيانات التي يمكنه تلقّيها من خلال تحديد فلتر نوايا في بيان التطبيق. في الإصدار 10 من نظام التشغيل Android والإصدارات الأقدم، لا تتوفّر للتطبيقات طريقة لتغيير فلاتر ملفّات تعريف ال intents أثناء التشغيل. هذه مشكلة في تطبيقات المحاكاة الافتراضية (مثل أجهزة الكمبيوتر الافتراضية وأجهزة الكمبيوتر المكتبي عن بُعد) لأنّها لا تتيح معرفة نوع البرامج التي سيثبّتها المستخدم بدقة.
يقدّم نظام التشغيل Android 11 مجموعات MIME، وهي عنصر جديد في البيان يتيح للتطبيق
تحديد مجموعة ديناميكية من أنواع MIME في فلتر الأهداف وتعديلها
برمجيًا أثناء التشغيل. لاستخدام مجموعة MIME، أدرِج عنصر بيانات في بيان
تطبيقك باستخدام السمة الجديدة android:mimeGroup
:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
قيمة السمة android:mimeGroup
هي معرّف سلسلة نصية عشوائي
يحدّد مجموعة MIME في وقت التشغيل. يمكنك الوصول إلى محتويات
مجموعة MIME وتعديلها من خلال تمرير رقم تعريفها إلى الطريقتَين الجديدتَين التاليتَين في فئة
PackageManager
API:
عند إضافة نوع MIME إلى مجموعة MIME آليًا، يعمل بالطريقة نفسها تمامًا التي يعمل بها نوع MIME ثابت تم تحديده صراحةً في البيان.
تحسينات على ميزة "الملء التلقائي"
يقدّم نظام التشغيل Android 11 تحسينات على خدمات الملء التلقائي.
معرّفات التلميح في AssistStructure.ViewNode
غالبًا ما يكون من المفيد لخدمات الملء التلقائي احتساب تجزئة توقيع لعرض، وذلك
استنادًا إلى خصائص العرض. يُعدّ
تلميح العرض سمة
جيدة بشكل خاص لتضمينها عند احتساب تجزئة التوقيع، ولكن قد تتغيّر سلسلة التلميح
حسب لغة الهاتف. لحلّ هذه المشكلة، يوسّع نظام التشغيل Android 11
AssistStructure.ViewNode
بطريقة
getHintIdEntry()
جديدة، والتي تعرض معرّف المورد لنص التلميح الخاص بالعرض. توفِّر هذه المحاولة قيمة لا تعتمد على اللغة يمكنك استخدامها لاحتساب التجزئات
للتوقيع.
أحداث مجموعات البيانات المعروضة
لمساعدة خدمات الملء التلقائي في تحسين اقتراحاتها، يقدّم نظام Android 11 طريقة
لتحديد الحالات التي قدّمت فيها خدمة الملء التلقائي مجموعات بيانات ولكن لم يحدد
المستخدم أيًا منها. في Android 11، يُبلغ
FillEventHistory
عن نوع حدث جديد هو
TYPE_DATASETS_SHOWN
. يسجِّل FillEventHistory
حدثًا من هذا النوع كلما عرضت خدمة الملء التلقائي
مجموعة بيانات واحدة أو أكثر للمستخدم. يمكن لخدمات الملء التلقائي استخدام
هذه الأحداث مع الحدث الحالي
TYPE_DATASET_SELECTED
لتحديد ما إذا كان المستخدم قد اختار أيًا من خيارات
الملء التلقائي المقدَّمة.
دمج ميزة IME
يمكن الآن للوحات المفاتيح وخدمات IME الأخرى عرض اقتراحات الملء التلقائي مضمّنة في شريط اقتراحات أو واجهة مشابهة، بدلاً من عرضها في قائمة منسدلة. لحماية المعلومات الحسّاسة، مثل كلمات المرور وأرقام بطاقات الائتمان، يتم عرض الاقتراحات للمستخدم، ولكن لا يعرفها IME إلى أن يختار المستخدم أحدها. للحصول على معلومات عن كيفية إتاحة ميزة "الملء التلقائي" في أنظمة IME وخدمات إدارة كلمات المرور، يُرجى الاطّلاع على مقالة دمج ميزة "الملء التلقائي" مع لوحات المفاتيح.
مشاركة البيانات مع خدمة تسجيل المحتوى
بدءًا من الإصدار 11 من نظام التشغيل Android، يمكن لتطبيقك مشاركة البيانات مع خدمة التقاط المحتوى على الجهاز. تسهّل هذه الميزة على الجهاز تقديم ذكاء اصطناعي في السياق، مثل عرض اسم الأغنية التي يتم تشغيلها حاليًا في بيئة المستخدم.
لتوفير البيانات من تطبيقك لخدمة تسجيل المحتوى، يمكنك استدعاء الأسلوب
shareData()
في مثيل ContentCaptureManager
. إذا وافق النظام على طلب مشاركة البيانات، يتلقّى تطبيقك وصف ملف للكتابة فقط لمشاركته مع خدمة تسجيل المحتوى.