يقدّم 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.
إذا كان التطبيق يستهدف الإصدار Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، لن يتم عرض إشعاراته في شكل فقاعات ما لم تستوفِ متطلبات المحادثة الجديدة. وعلى وجه التحديد، يجب أن يكون الإشعار مرتبطًا باختصار.
قبل استخدام Android 11، إذا أردت أن تظهر فقاعات أحد الإشعارات، كان عليك تحديد أنّ الإشعار قد تم ضبطه ليتم تشغيله دائمًا في وضع واجهة مستخدم المستند. بدءًا من نظام التشغيل 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 العديد من التحسينات على المصادقة بالمقاييس الحيوية. تظهر هذه التغييرات أيضًا في مكتبة المقاييس الحيوية في Jetpack.
أنواع المصادقة
يقدّم Android 11 واجهة
BiometricManager.Authenticators
التي يمكنك استخدامها للتوضيح بأنواع المصادقة التي يتيحها
تطبيقك.
تحديد نوع المصادقة الذي تم استخدامه
بعد أن يقوم المستخدم بالمصادقة، يمكنك التحقق مما إذا كان المستخدم قد صادق باستخدام
بيانات اعتماد الجهاز أو بيانات اعتماد المقاييس الحيوية عن طريق الاتصال بـ
getAuthenticationType()
.
دعم إضافي لمفاتيح المصادقة لكل استخدام
يوفّر نظام التشغيل Android 11 مزيدًا من الدعم للمصادقة باستخدام مفاتيح المصادقة حسب الاستخدام.
الطرق المتوقّفة نهائيًا
يوقف نظام التشغيل Android 11 الطرق التالية نهائيًا:
- طريقة
setDeviceCredentialAllowed()
. - طريقة
setUserAuthenticationValidityDurationSeconds()
. - إصدار
canAuthenticate()
المحمّل بشكل زائد ولا يتطلب أي وسيطات.
المشاركة الآمنة لمجموعات البيانات الكبيرة
في بعض الحالات، كتلك التي تتضمن تعلّم الآلة أو تشغيل الوسائط، قد يرغب تطبيقك في استخدام مجموعة البيانات الكبيرة نفسها مثل تطبيق آخر. في الإصدارات السابقة من Android، كان كل من التطبيق والتطبيق الآخر سيحتاج إلى تنزيل نسخة منفصلة من مجموعة البيانات نفسها.
وللحدّ من تكرار البيانات، على كل من الشبكة وعلى القرص، يسمح نظام التشغيل Android 11 بتخزين مجموعات البيانات الكبيرة هذه مؤقتًا على الجهاز باستخدام وحدات تخزين البيانات الثنائية الكبيرة. لمعرفة المزيد من المعلومات عن مشاركة مجموعات البيانات، يمكنك الاطّلاع على الدليل المفصّل حول مشاركة مجموعات البيانات الكبيرة.
إجراء التشفير المستند إلى الملفات بعد إعادة تشغيل التحديث عبر الهواء بدون بيانات اعتماد المستخدم
بعد أن يُكمل الجهاز تحديث البيانات عبر الهواء ويعيد تشغيله، تصبح مفاتيح بيانات الاعتماد المشفرة (CE) الموضوعة في وحدة التخزين المحمية ببيانات الاعتماد متاحة فورًا لعمليات التشفير المستند إلى الملفات (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 وإنشاء ملف APK Signature Scheme v4. يجب وضع ملف التوقيع v4 بجوار ملف APK لكي تعمل هذه الميزة.
رصد الخطأ باستخدام تخصيص الذاكرة الأصلي
GWP-ASan هي ميزة من ميزات تخصيص الذاكرة الأصلية التي تساعد في العثور على أخطاء تجاوز المخزن المؤقت للذاكرة المستخدمة بعد تفريغها (Use-After-Free) وتجاوز المخزن المؤقت للذاكرة الديناميكية (Heap-Buffer-Overflow). ويمكنك تفعيل هذه الميزة عالميًا أو لعمليات فرعية معيّنة لتطبيقك. ولمعرفة المزيد من المعلومات، اطّلع على دليل GWP-Asan.
الإصدار 1.3 من واجهة برمجة تطبيقات الشبكات العصبونية
يوسِّع نظام التشغيل Android 11 واجهة برمجة التطبيقات للشبكات العصبية (NNAPI) ويحسّنها.
العمليات الجديدة
يقدّم الإصدار 1.3 من NNAPI نوعًا جديدًا من المعاملات، وهو TENSOR_QUANT8_ASYMM_SIGNED
،
لدعم نظام قياس الكميات الجديد في TensorFlow Lite.
بالإضافة إلى ذلك، يقدم NNAPI 1.3 العمليات الجديدة التالية:
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()
لمعرفة المزيد من المعلومات، يمكنك مراجعة نموذج نطاق ذاكرة الشبكة العصبونية.
دعم واجهة برمجة تطبيقات التبعية وحدود المزامنة: يتضمن الإصدار 1.3 من NNAPI دعمًا للحوسبة غير المتزامنة مع التبعيات، ما يسمح بتقليل النفقات العامة بشكل كبير عند استدعاء النماذج الصغيرة المتسلسلة. تضيف هذه الميزة الدوال الجديدة التالية:
مسار التحكم: يتضمن الإصدار 1.3 من NNAPI إمكانية تنفيذ تدفق التحكم العام من خلال عمليتَي الرسم البياني الجديد
ANEURALNETWORKS_IF
وANEURALNETWORKS_WHILE
اللتين تقبلان النماذج الأخرى كوسيطات باستخدام نوع المعاملANEURALNETWORKS_MODEL
الجديد. بالإضافة إلى ذلك، تضيف هذه الميزة الدوال الجديدة التالية:
واجهة برمجة التطبيقات الحرارية NDK
قد يؤدي ارتفاع درجة حرارة الأجهزة إلى تقييد وحدة المعالجة المركزية (CPU) و/أو وحدة معالجة الرسومات (GPU)، ما قد يؤثر في التطبيقات بطرق غير متوقَّعة. فمن المرجح أن تواجه التطبيقات أو الألعاب التي تتضمن رسومات معقدة أو عمليات حوسبة ثقيلة أو نشاطًا مستدامًا على الشبكة.
استخدم 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
يمكنك أيضًا التحكم في الرسوم المتحركة لأداة 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()
مع الفهرس، وفي حال تم إعداده لاستخدام واجهة برمجة تطبيقات القالب، يجب أن تستخدم التطبيقات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()
.
دالة Aالصوت الجديدة AAudioStream_Release()
تُطلق الدالة
AAudioStream_close()
بثًا صوتيًا وتغلقه في الوقت نفسه. يمكن أن تكون هذه المعلومات خطيرة. وإذا حاولت عملية أخرى الوصول إلى البث بعد إغلاقه، سيحدث عطل.
تعمل الدالة الجديدة
AAudioStream_release()
على إطلاق ساحة المشاركات ولكنها لا تغلقها. يؤدي ذلك إلى تحرير موارده
ويترك البث في حالة معروفة. يستمر الكائن حتى يتم طلب
AAudioStream_close()
.
واجهة برمجة تطبيقات MediaParser
MediaParser هي واجهة برمجة تطبيقات جديدة منخفضة المستوى لاستخراج الوسائط. وهي أكثر مرونة من Mediasnippetor وتوفّر إمكانية تحكُّم إضافية في وظائف استخراج الوسائط.
التقاط الصوت من جهاز USB
عندما يستخدم تطبيق ليس لديه إذن RECORD_AUDIO
UsbManager
لطلب الوصول المباشر إلى جهاز USB صوتي يتضمن إمكانية التقاط
الصوت (مثل سماعة رأس USB)، تظهر رسالة تحذير جديدة تطلب من
المستخدم تأكيد الإذن لاستخدام الجهاز. يتجاهل النظام أي خيار "الاستخدام الدائم"، لذا على المستخدم الإقرار بالتحذير ومنح الإذن في كل مرة يطلب فيها التطبيق الوصول.
لتجنّب هذا السلوك، يجب أن يطلب تطبيقك إذن RECORD_AUDIO
.
الوصول إلى الميكروفون المتزامن
يضيف نظام التشغيل Android 11 طرقًا جديدة إلى واجهات برمجة التطبيقات AudioRecord
وMediaRecorder
وAAudioStream
. تؤدّي هذه الطرق إلى تفعيل وإيقاف إمكانية التقاط الصور بشكل متزامن
بغض النظر عن حالة الاستخدام المحدَّدة. يُرجى الاطّلاع على مشاركة إدخال الصوت.
أداة تبديل الإخراج
ينفِّذ نظام التشغيل Android 11 سلوكًا جديدًا للتطبيقات التي تستخدم واجهات برمجة تطبيقات جهاز التوجيه للوسائط والبث.
بالإضافة إلى الوصول إلى خيارات البث من داخل التطبيق، تظهر خيارات التبديل أيضًا في مشغّل وسائط النظام. يساعد ذلك في منح المستخدم رحلة سلسة عند التنقل بين الأجهزة أثناء تغيير سياقات المشاهدة والاستماع، مثل مشاهدة الفيديو في المطبخ مقابل مشاهدة الفيديو على الهاتف، أو الاستماع إلى الصوت في المنزل أو السيارة. ويمكنك الاطّلاع على محوِّل الإخراج.
إمكانية الاتصال
تحسينات نقطة مرور Wi-Fi
للحصول على معلومات حول إمكانات "نقطة مرور" المُضافة في الإصدار 11 من نظام Android، يُرجى الاطّلاع على القسم نقطة مرور.
تم توسيع واجهة برمجة تطبيقات اقتراحات Wi-Fi
يوسّع Android 11 واجهة برمجة التطبيقات لاقتراحات اتصال Wi-Fi لزيادة إمكانات إدارة الشبكة في تطبيقك، وتشمل هذه الميزات ما يلي:
- يمكن لتطبيقات إدارة الاتصال إدارة شبكاتها الخاصة من خلال السماح بطلبات إلغاء الربط.
- يتم دمج شبكات نقطة المرور في واجهة برمجة التطبيقات للاقتراحات ويمكن اقتراحها على المستخدم.
- وتمكّنك واجهات برمجة التطبيقات Analytics من الحصول على معلومات حول جودة شبكاتك.
إشعارات خدمة فحص المكالمات
بدءًا من نظام التشغيل Android 11، يمكن لخدمة CallScreeningService طلب معلومات حول حالة التحقق من STIR/SHAKEN (verstat) للمكالمات الواردة. يتم توفير هذه المعلومات كجزء من تفاصيل المكالمات للمكالمات الواردة.
إذا كان CallScreeningService
حاصلاً على إذن READ_CONTACTS
،
يتم إرسال إشعار إلى التطبيق عند تلقّي مكالمات واردة من رقم في جهات اتصال المستخدم أو
مكالمات صادرة إليه.
لمزيد من المعلومات، يمكنك الاطّلاع على منع انتحال رقم المتّصل.
فتح تحديثات Mobile API
للحصول على معلومات حول دعم OMAPI على نظام التشغيل Android 11 والإصدارات الأحدث، يُرجى الاطّلاع على فتح دعم قارئ واجهة برمجة التطبيقات للأجهزة الجوّالة.
شبكات VPN العالية الأداء
إنّ التطبيقات التي تستهدف المستوى 30 لواجهة برمجة التطبيقات والمستويات الأعلى أو التي تعمل على أجهزة تم تشغيلها بالمستوى 29 من واجهة برمجة التطبيقات والإصدارات الأحدث يمكنها تطبيق بروتوكول IKEv2/IPsec على الشبكات الافتراضية الخاصة لكل من الشبكات الافتراضية الخاصة التي ضبطها المستخدم وتلك المستندة إلى التطبيقات.
تعمل الشبكات الافتراضية الخاصة (VPN) في نظام التشغيل الأصلي، ما يبسّط الرمز المطلوب لإنشاء اتصالات الشبكة الافتراضية الخاصة بنظام IKEv2/IPsec في أحد التطبيقات.
التحكم في الوصول إلى الشبكة لكل عملية
للحصول على معلومات حول تفعيل الوصول إلى الشبكة على أساس كل عملية، راجِع إدارة استخدام الشبكة.
السماح بالعديد من إعدادات نقطة المرور المثبَّتة باستخدام اسم النطاق المؤهل نفسه (FQDN)
بدءًا من نظام التشغيل Android 11، يمكنك استخدام PasspointConfiguration.getUniqueId()
للحصول على معرّف فريد لعنصر PasspointConfiguration
، ما يتيح لمستخدمي تطبيقك تثبيت ملفات شخصية متعددة باستخدام اسم النطاق المؤهل بالكامل (FQDN) نفسه.
هذه الوظيفة مفيدة عندما ينشر مشغّل شبكة الجوّال أكثر من مجموعة واحدة من رمز بلد الجوّال (مركز عملائي) ورمز شبكة الجوّال (MNC) على شبكته، ولكن يكون له اسم FQDN واحد فقط. على نظام التشغيل Android 11 والإصدارات الأحدث، من الممكن تثبيت أكثر من ملف شخصي واحد يحمل اسم المجال المؤهل نفسه، ويتوافق مع الشبكة التي يستخدمها مقدّم خدمة Google Home عندما يثبّت المستخدم شريحة SIM تشتمل على "مركز عملائي" أو "MNC".
التوافق مع هوائي نظام GNSS
يقدّم نظام التشغيل Android 11 فئة
GnssAntennaInfo
التي تتيح لتطبيقك
الاستفادة بشكل أكبر من موضع دقة السنتيمتر الذي يمكن أن يوفّره
نظام الأقمار الصناعية للتنقّل العالمي (GNSS).
تعرَّف على المزيد من المعلومات في دليل معلومات معايرة الهوائي.
الرسومات
برنامج فك ترميز صور NDK
توفّر NDK ImageDecoder
API واجهة برمجة تطبيقات عادية
لتطبيقات 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>
الصور والكاميرا
كتم صوت الإشعارات والاهتزازات أثناء الالتقاط النشط
بدءًا من نظام التشغيل Android 11، عند استخدام الكاميرا بشكل نشط، يمكن للتطبيق كتم صوت الاهتزازات فقط، سواء الأصوات أو الاهتزازات، أو عدم استخدام setCameraAudioRestriction()
مطلقًا.
دعم موسّع للكاميرا في محاكي Android
للحصول على معلومات عن الدعم الموسّع للكاميرات في المحاكي بدءًا من نظام التشغيل Android 11، يمكنك الاطّلاع على دعم الكاميرا.
دعم الاستخدام المتزامن لأكثر من كاميرا واحدة
يضيف نظام التشغيل Android 11 واجهات برمجة تطبيقات إلى طلبات الدعم المتعلقة باستخدام أكثر من كاميرا واحدة في آن واحد، بما في ذلك الكاميرا الأمامية والكاميرا الخلفية.
للتحقّق من التوافق على الجهاز الذي يعمل عليه تطبيقك، استخدِم الطرق التالية:
- يعرض
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 واجهة برمجة تطبيقات جديدة تتيح للتطبيقات توسيع نطاق طريقة البحث عن الموارد وتحميلها بشكل ديناميكي. تكون فئتا واجهة برمجة التطبيقات الجديدة
ResourcesLoader
وResourcesProvider
المسؤولة بشكل أساسي عن توفير الوظائف الجديدة. وتوفر هذه الأدوات معًا إمكانية توفير موارد وأصول إضافية أو تعديل قيم الموارد والأصول الموجودة.
الكائنات ResourcesLoader
هي حاويات توفر كائنات ResourcesProvider
لمثيل Resources
لأحد التطبيقات. بدورها، توفر كائنات ResourcesProvider
طرقًا لتحميل بيانات الموارد من
APK وجداول الموارد.
تتمثل إحدى حالات الاستخدام الأساسية لواجهة برمجة التطبيقات هذه في تحميل مادة العرض المخصّصة. يمكنك استخدام
loadFromDirectory()
لإنشاء ResourcesProvider
يعيد توجيه درجة دقة الموارد ومواد العرض
المستندة إلى الملفات، ما يجعله يبحث في دليل معيّن بدلاً من ملف APK. يمكنك الوصول إلى مواد العرض هذه من خلال مجموعة طُرق open()
من فئة واجهة برمجة التطبيقات
AssetManager
، تمامًا كما هو الحال مع مواد العرض المجمّعة في حزمة APK.
الإصدار 4 من مخطط توقيع APK
يتوافق نظام التشغيل Android 11 مع الإصدار 4 من مخطّط توقيع APK. ينتج عن هذا المخطَّط نوعًا جديدًا من التوقيع في ملف منفصل (apk-name.apk.idsig
) ولكنه يشبه إلى حد كبير الإصدارين 2 و3. لن يتم إجراء أي تغييرات على حزمة APK. يتوافق هذا النظام مع
التثبيت المتزايد لحزمة APK من خلال AADB، والذي يعمل على تسريع عملية تثبيت APK.
فلاتر الهدف الديناميكي
من أجل تلقّي الأهداف، يجب أن يعلن التطبيق في وقت التجميع عن أنواع البيانات التي يمكنه تلقّيها عن طريق تحديد فلتر النية في بيان التطبيق. في نظام التشغيل Android 10 والإصدارات الأقدم، لا تستطيع التطبيقات تغيير فلاتر الأهداف أثناء وقت التشغيل. هذه مشكلة بالنسبة إلى تطبيقات المحاكاة الافتراضية (مثل الأجهزة الافتراضية وأجهزة الكمبيوتر المكتبية البعيدة) لأنها ليست لديها طريقة لمعرفة بالضبط البرامج التي سيثبّتها المستخدم بداخلها.
يقدّم نظام التشغيل 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
:
عند إضافة نوع MIME إلى مجموعة MIME آليًا، فإنه يعمل تمامًا مثل نوع MIME الثابت الذي تم تعريفه صراحةً في البيان.
تحسينات الملء التلقائي
يقدّم Android 11 تحسينات على خدمات الملء التلقائي.
معرّفات التلميحات في AssistAttribute.ViewNode
غالبًا ما يكون من المفيد لخدمات الملء التلقائي حساب تجزئة التوقيع لطريقة العرض
بناءً على خصائص طريقة العرض. view hint هي خاصية جيدة بشكل خاص يمكن تضمينها عند احتساب تجزئة توقيع، إلا أنّ سلسلة التلميح قد تتغيّر بلغة الهاتف. لحل هذه المشكلة، يعمل Android 11
على توسيع
AssistStructure.ViewNode
طريقة
getHintIdEntry()
الجديدة التي تعرض معرّف المورد لنص تلميح العرض. توفّر هذه الطريقة قيمة مستقلة عن اللغة يمكنك استخدامها لحساب هاشتاغ التوقيع.
الأحداث المعروضة لمجموعات البيانات
لمساعدة خدمات الملء التلقائي في تحسين الاقتراحات، يوفّر Android 11 طريقة
لتحديد الحالات التي قدّمت فيها خدمة الملء التلقائي مجموعات بيانات ولكن لم يختَر المستخدم أيًا منها. في نظام التشغيل Android 11، تُبلِغ
FillEventHistory
عن نوع حدث
TYPE_DATASETS_SHOWN
جديد. ويسجّل FillEventHistory
حدثًا من هذا النوع كلما عرضت خدمة الملء التلقائي مجموعة بيانات واحدة أو أكثر للمستخدم. يمكن لخدمات الملء التلقائي استخدام
هذه الأحداث إلى جانب حدث
TYPE_DATASET_SELECTED
الحالي لتحديد ما إذا كان المستخدم قد اختار أيًّا من خيارات الملء التلقائي
المقدَّمة.
دمج أداة IME
يمكن للوحات المفاتيح وأدوات IME الأخرى الآن عرض اقتراحات الملء التلقائي ضمن شريط اقتراحات أو في واجهة مشابهة، بدلاً من عرضها في قائمة منسدلة. لحماية المعلومات الحساسة مثل كلمات المرور وأرقام بطاقات الائتمان، يتم عرض الاقتراحات للمستخدم ولا تكون معروفة لأداة IME إلى أن يختار المستخدم أحدها. للحصول على معلومات حول الطريقة التي تتيح بها أدوات IME وبرامج إدارة كلمات المرور استخدام هذه الميزة، يُرجى الاطّلاع على دمج الملء التلقائي مع لوحات المفاتيح.
مشاركة البيانات مع خدمة تسجيل المحتوى
بدءًا من نظام التشغيل Android 11، يمكن لتطبيقك مشاركة البيانات مع خدمة تسجيل المحتوى على الجهاز. وتسهِّل هذه الإمكانية على الجهاز تقديم معلومات ضمن السياق، مثل عرض اسم أغنية يتم تشغيلها حاليًا في بيئة المستخدم.
لإتاحة بيانات تطبيقك لخدمة التقاط المحتوى، يجب استدعاء الإجراء
shareData()
على مثيل ContentCaptureManager
. إذا وافق النظام على طلب مشاركة البيانات، سيتلقى تطبيقك واصفًا للملفات للكتابة فقط لمشاركته مع خدمة تسجيل المحتوى.