يقدّم نظام التشغيل 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، إذا أردت عرض إشعار في شكل فقاعة، كان عليك تحديدًا تحديد أنّه تم ضبط الإشعار لبدءه دائمًا في وضع واجهة مستخدم المستند. بدايةً من نظام التشغيل Android 11، لم تعُد بحاجة إلى ضبط هذا الإعداد بشكل صريح. إذا ظهر إشعار فقاعات، يضبط النظام الأساسي الإشعار تلقائيًا ليتم تشغيله دائمًا في وضع واجهة مستخدم المستند.
تم إجراء عدد من التحسينات على أداء الفقاعات، وأصبح لدى المستخدمين قدر أكبر من المرونة في تفعيل الفقاعات وإيقافها من كل تطبيق. بالنسبة إلى المطوّرين الذين نفّذوا الإصدار التجريبي، تم إجراء بعض التغييرات على واجهات برمجة التطبيقات في 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 على توسيع واجهة برمجة تطبيقات الشبكات العصبية (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 عناصر تحكّم جديدة للمساعدة في تشغيل تعلُّم الآلة بسلاسة:
QoS API: تشمل واجهة برمجة تطبيقات جودة الخدمة الجديدة إمكانية تحديد الأولويات والمواعيد النهائية للمهام في 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) ودعم حد المزامنة: 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.
التحكّم في الصورة المتحركة لميزة IME
يمكنك أيضًا التحكّم في المؤثر الحركي لطريقة إدخال النص أو المؤثر الحركي لشريط نظام آخر، مثل شريط التنقّل. لإجراء ذلك، عليك أولاً طلب
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
من خلال فئة أداة إنشاء، وتتوافق مع النوع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/DeviceBuffer بالخانة. 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()
.
وظيفة AAudioStream_release() الجديدة
تؤدي الدالة
AAudioStream_close()
إلى إصدار بث صوتي وإغلاقه في الوقت نفسه. قد يكون هذا الإجراء خطيرًا. وإذا حاولت
عملية أخرى الوصول إلى البث بعد إغلاقه، ستتعطّل العملية.
تُطلق الدالة الجديدة
AAudioStream_release()
البثّ بدون إغلاقه. يؤدي ذلك إلى تحرير موارده وترك البث في حالة معروفة. يستمر ظهور العنصر إلى أن يتم استدعاء
AAudioStream_close()
.
MediaParser API
MediaParser هي واجهة برمجة تطبيقات جديدة من المستوى الأدنى لأجل استخراج الوسائط. وهي أكثر مرونة من MediaExtractor وتوفّر بدورها إمكانية تحكّم إضافية في وظيفة استخراج الوسائط.
تسجيل الصوت من جهاز USB
عندما يستخدم تطبيق لا يملك إذن RECORD_AUDIO
UsbManager
لطلب الوصول المباشر إلى جهاز صوت USB مزوّد بميزة تسجيل الصوت (مثل سماعة رأس USB)، تظهر رسالة تحذير جديدة تطلب من
المستخدم تأكيد الإذن لاستخدام الجهاز. يتجاهل النظام أي خيار "استخدام
دائم"، لذا على المستخدم الموافقة على التحذير ومنح الإذن في كل
مرة يطلب فيها أحد التطبيقات الوصول إلى البيانات.
لتجنُّب هذا السلوك، يجب أن يطلب تطبيقك إذن RECORD_AUDIO
.
الوصول المتزامن إلى الميكروفون
يضيف Android 11 طرقًا جديدة إلى واجهات برمجة التطبيقات 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 للمعرّف المتصل.
فتح تحديثات Mobile API
للحصول على معلومات حول توافق OMAPI على Android 11 والإصدارات الأحدث، يُرجى الاطّلاع على توافق Open Mobile API reader.
شبكات VPN ذات الأداء العالي
يمكن للتطبيقات التي تستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات أو التي تعمل على الأجهزة التي تم تشغيلها بالمستوى 29 أو أعلى لواجهة برمجة التطبيقات تطبيق بروتوكول IKEv2/IPsec على الشبكات الافتراضية الخاصة (VPN) للشبكات الافتراضية الخاصة التي يضبطها المستخدم والشبكات المستندة إلى التطبيقات.
تعمل شبكات VPN بشكل أصلي مع نظام التشغيل، ما يبسط الرمز البرمجي المطلوب لبدء اتصالات شبكة VPN باستخدام بروتوكول IKEv2/IPsec في أحد التطبيقات.
التحكم في الوصول إلى الشبكة لكل عملية
للحصول على معلومات عن تفعيل الوصول إلى الشبكة على أساس كل عملية، راجِع إدارة استخدام الشبكة.
السماح بإعدادات متعددة تم تثبيتها من Passpoint باستخدام الاسم الكامل وعنوان النطاق (FQDN) نفسه
اعتبارًا من الإصدار 11 من نظام التشغيل Android، يمكنك استخدام
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) أو تجميع مكتبات تابعة لجهات خارجية لفك ترميز الصور. لمزيد من المعلومات، يُرجى الاطّلاع على
دليل المطوّر الخاص ببرنامج فك ترميز الصور.
واجهة برمجة تطبيقات عدد اللقطات في الثانية
يوفّر Android 11 واجهة برمجة تطبيقات تتيح للتطبيقات إعلام النظام بعدد اللقطات المستهدَف في الثانية، لتقليل اهتزاز الجهاز على الأجهزة التي تتوافق مع معدلات إعادة تحميل متعددة. للحصول على معلومات حول كيفية استخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على دليل معدّل عرض اللقطات.
طلب الدعم لوقت استجابة منخفض والتحقق منه
يمكن لبعض الشاشات إجراء عمليات ما بعد المعالجة للرسومات، مثل بعض الشاشات الخارجية والتلفزيونات. تعمل هذه المعالجة اللاحقة على تحسين الرسومات، ولكن يمكن أن يؤدي ذلك إلى زيادة وقت الاستجابة. إنّ أجهزة العرض الأحدث التي تتيح استخدام 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
للحصول على معلومات عن التوافق الموسَّع للكاميرات في المحاكي بدءًا من الإصدار 11 من نظام Android، يُرجى الاطّلاع على التوافق مع الكاميرا.
إتاحة استخدام أكثر من كاميرا في الوقت نفسه
يضيف الإصدار 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 واجهة برمجة تطبيقات جديدة تتيح للتطبيقات dynamis
توسيع نطاق البحث عن الموارد وتحميلها. تتحمّل فئات واجهة برمجة التطبيقات الجديدة
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
. إذا قبِل النظام طلب مشاركة البيانات، سيتلقّى تطبيقك واصفًا للملفات للكتابة فقط لمشاركته مع خدمة تسجيل المحتوى.