يقدّم 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 Biometric.
أنواع المصادقة
يقدّم نظام التشغيل Android 11 واجهة
BiometricManager.Authenticators
التي يمكنك استخدامها للإعلان عن أنواع المصادقة التي يتيحها
تطبيقك.
تحديد نوع المصادقة المستخدَم
بعد مصادقة المستخدم، يمكنك التحقّق مما إذا كان المستخدم قد أجرى المصادقة باستخدام بيانات اعتماد الجهاز أو بيانات الاعتماد المستندة إلى المقاييس الحيوية من خلال استدعاء getAuthenticationType().
دعم إضافي لمفاتيح المصادقة لكل استخدام
يوفّر Android 11 دعمًا أكبر للمصادقة باستخدام مفاتيح المصادقة لكل استخدام.
الطرق المتوقفة نهائيًا
يوقف Android 11 الطرق التالية نهائيًا:
- طريقة
setDeviceCredentialAllowed() - طريقة
setUserAuthenticationValidityDurationSeconds() - الإصدار المُحمَّل بشكل زائد من
canAuthenticate()الذي لا يتطلّب أي وسيطات
مشاركة مجموعات البيانات الكبيرة بأمان
في بعض الحالات، مثل تلك التي تتضمّن تعلُّم الآلة أو تشغيل الوسائط، قد يحتاج تطبيقك إلى استخدام مجموعة البيانات الكبيرة نفسها التي يستخدمها تطبيق آخر. في الإصدارات السابقة من Android، كان تطبيقك والتطبيق الآخر يحتاجان إلى تنزيل نسخة منفصلة من مجموعة البيانات نفسها.
للمساعدة في تقليل تكرار البيانات، سواء على الشبكة أو على القرص، يسمح Android 11 بتخزين مجموعات البيانات الكبيرة هذه مؤقتًا على الجهاز باستخدام نقاط البيانات المشتركة. لمزيد من المعلومات حول مشاركة مجموعات البيانات، يُرجى الاطّلاع على الدليل المفصّل حول مشاركة مجموعات البيانات الكبيرة.
إجراء التشفير على مستوى الملفات بعد إعادة تشغيل OTA بدون بيانات اعتماد المستخدم
بعد أن يكمل الجهاز تحديثًا عبر اتصال لاسلكي ويعيد التشغيل، تصبح مفاتيح "التشفير باستخدام بيانات الاعتماد" (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 وإنشاء ملف الإصدار 4 من مخطّط توقيع حِزم APK. يجب وضع ملف توقيع الإصدار 4 بجانب حزمة APK لكي تعمل هذه الميزة.
رصد الأخطاء باستخدام أداة تخصيص الذاكرة الأصلية
GWP-ASan هي ميزة لتخصيص الذاكرة الأصلية تساعد في العثور على أخطاء استخدام ذاكرة معيّنة بعد تفريغها (use-after-free) وتجاوز سعة المخزن المؤقت للذاكرة الديناميكية (heap-buffer-overflow). يمكنك تفعيل هذه الميزة على مستوى التطبيق أو لعمليات فرعية محدّدة في تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على دليل GWP-Asan.
الإصدار 1.3 من واجهة برمجة التطبيقات Neural Networks API
يوسّع نظام التشغيل Android 11 نطاق واجهة برمجة التطبيقات للشبكات العصبونية (NNAPI) ويحسّنها.
عمليات جديدة
يقدّم NNAPI 1.3 نوع معامل جديدًا، وهو TENSOR_QUANT8_ASYMM_SIGNED، لدعم مخطط التكميم الجديد في TensorFlow Lite.
بالإضافة إلى ذلك، يقدّم NNAPI 1.3 العمليات الجديدة التالية:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
عناصر تحكّم جديدة في تعلُّم الآلة
يقدّم NNAPI 1.3 عناصر تحكّم جديدة للمساعدة في تشغيل تعلُّم الآلة بسلاسة:
واجهة برمجة تطبيقات جودة الخدمة (QoS): تتضمّن واجهة برمجة تطبيقات جودة الخدمة الجديدة إمكانية تحديد الأولويات والمواعيد النهائية للمهام في واجهة برمجة التطبيقات NNAPI من خلال الوظائف الجديدة التالية:
إدخال/إخراج نطاق الذاكرة: يتضمّن الإصدار 1.3 من NNAPI إمكانية استخدام نطاقات الذاكرة كإدخال وإخراج للتنفيذ. يؤدي ذلك إلى إزالة النُسخ غير الضرورية من البيانات نفسها بين مكوّنات النظام المختلفة، ما يحسّن أداء وقت التشغيل لشبكات Android العصبية. تضيف هذه الميزة مجموعة من واجهات برمجة تطبيقات NDK الجديدة للاستخدام مع كائنات
ANeuralNetworksMemoryDescوANeuralNetworkMemory، بما في ذلك الدوال التالية:ANeuralNetworksMemoryDesc_create()ANeuralNetworksMemoryDesc_free()ANeuralNetworksMemoryDesc_addInputRole()ANeuralNetworksMemoryDesc_addOutputRole()ANeuralNetworksMemoryDesc_setDimensions()ANeuralNetworksMemoryDesc_finish()ANeuralNetworksMemory_createFromDesc()ANeuralNetworksMemory_copy()
لمزيد من المعلومات، يُرجى الاطّلاع على نموذج نطاق ذاكرة الشبكة العصبية.
واجهة برمجة تطبيقات التبعية ودعم سياج المزامنة: يتضمّن الإصدار 1.3 من NNAPI إمكانية استخدام الحوسبة غير المتزامنة مع التبعيات، ما يتيح تقليل النفقات العامة بشكل كبير عند استدعاء النماذج المتسلسلة الصغيرة. تضيف هذه الميزة الدوال الجديدة التالية:
تدفق التحكم: يتضمن NNAPI 1.3 دعمًا لتدفق التحكم العام من خلال عمليات الرسم البياني الجديدة
ANEURALNETWORKS_IFوANEURALNETWORKS_WHILE، والتي تقبل النماذج الأخرى كوسيطات باستخدام نوع المعامل الجديدANEURALNETWORKS_MODEL. بالإضافة إلى ذلك، تضيف هذه الميزة الدوال الجديدة التالية:
NDK Thermal API
عندما ترتفع درجة حرارة الأجهزة بشكل كبير، قد يتم تقييد وحدة المعالجة المركزية (CPU) و/أو وحدة معالجة الرسومات (GPU)، ما قد يؤثر في التطبيقات بطرق غير متوقعة. من المرجّح أن تواجه التطبيقات أو الألعاب التي تتضمّن رسومات معقّدة أو عمليات حسابية مكثّفة أو نشاطًا مستمرًا على الشبكة مشاكل.
استخدِم واجهة برمجة التطبيقات NDK Thermal API في نظام التشغيل Android 11 لمراقبة التغييرات في درجة الحرارة على الجهاز، ثم اتّخِذ إجراءً للحفاظ على انخفاض معدّل استهلاك الطاقة وانخفاض درجة حرارة الجهاز. تشبه واجهة برمجة التطبيقات هذه واجهة برمجة التطبيقات Java Thermal API، ويمكنك استخدامها لتلقّي إشعارات بشأن أي تغيير في الحالة الحرارية أو للاطّلاع على الحالة الحالية مباشرةً.
النص والإدخال
تحسين عمليات الانتقال في "محرِّر أسلوب الإدخال"
يقدّم Android 11 واجهات برمجة تطبيقات جديدة لتحسين عمليات الانتقال في برامج تحرير أسلوب الإدخال (IME)، مثل لوحات المفاتيح على الشاشة. تسهّل واجهات برمجة التطبيقات هذه تعديل محتوى تطبيقك بالتزامن مع ظهور واختفاء محرِّر أسلوب الإدخال، ومع عناصر أخرى مثل شريطَي الحالة والتنقّل.
لإظهار أداة IME عندما يكون التركيز على أي EditText، يمكنك استدعاء
view.getInsetsController().show(Type.ime()).
(يمكنك استدعاء هذه الطريقة في أي عرض في
التسلسل الهرمي نفسه مثل EditText المركّز، ليس عليك استدعاؤه
على EditText على وجه التحديد.) لإخفاء محرِّر أسلوب الإدخال، يمكنك استدعاء
view.getInsetsController().hide(Type.ime()).
يمكنك التحقّق مما إذا كان محرِّر أسلوب الإدخال مرئيًا حاليًا من خلال استدعاء
view.getRootWindowInsets().isVisible(Type.ime()).
لمزامنة طرق عرض تطبيقك مع ظهور واختفاء أداة IME، يمكنك ضبط متتبِّع على طريقة عرض من خلال توفير
WindowInsetsAnimation.Callback
إلى View.setWindowInsetsAnimationCallback().
(يمكنك ضبط هذا المستمع على أي عرض، وليس من الضروري أن يكون EditText).
تستدعي أداة IME طريقة
onPrepare()
الخاصة بالمستمع، ثم تستدعي
onStart()
في بداية عملية النقل. بعد ذلك، يتم استدعاء
onProgress()
عند كل تقدّم في عملية الانتقال. عند انتهاء عملية النقل، يستدعي محرِّر أسلوب الإدخال
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/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.
الوصول المتزامن إلى الميكروفون
يضيف Android 11 طرقًا جديدة إلى واجهات برمجة التطبيقات AudioRecord وMediaRecorder وAAudioStream. تتيح هذه الطرق تفعيل إمكانية التقاط الصور والفيديوهات في الوقت نفسه وإيقافها
بغض النظر عن حالة الاستخدام المحدّدة. يُرجى الاطّلاع على مشاركة إدخال الصوت.
أداة التبديل بين أجهزة التشغيل
يوفّر Android 11 سلوكًا جديدًا للتطبيقات التي تستخدم واجهات برمجة التطبيقات cast وmediarouter.
بالإضافة إلى الوصول إلى خيارات البث من داخل التطبيق، تظهر أيضًا خيارات التبديل في مشغّل الوسائط الخاص بالنظام. يساعد ذلك في توفير تجربة سلسة للمستخدم عند التنقّل بين الأجهزة أثناء تغيير سياقات المشاهدة والاستماع، مثل مشاهدة فيديو في المطبخ مقارنةً بمشاهدته على الهاتف، أو الاستماع إلى محتوى صوتي في المنزل أو السيارة. يُرجى الاطّلاع على أداة التبديل بين أجهزة التشغيل.
إمكانية الاتصال
تحسينات على Wi-Fi Passpoint
للحصول على معلومات حول إمكانات Passpoint التي تمت إضافتها في Android 11، يُرجى الاطّلاع على Passpoint.
توسيع واجهة برمجة التطبيقات Wi-Fi Suggestion
يوسّع Android 11 نطاق واجهة برمجة التطبيقات Wi-Fi Suggestion لزيادة إمكانات إدارة الشبكة في تطبيقك، بما في ذلك ما يلي:
- يمكن لتطبيقات إدارة إمكانية الاتصال إدارة شبكاتها من خلال السماح بطلبات قطع الاتصال.
- يتم دمج شبكات Passpoint في واجهة برمجة التطبيقات Suggestion API ويمكن اقتراحها للمستخدم.
- تتيح لك واجهات برمجة التطبيقات الخاصة بالإحصاءات الحصول على معلومات حول جودة شبكاتك.
تعديلات على CallScreeningService
بدءًا من الإصدار Android 11، يمكن لخدمة CallScreeningService طلب معلومات عن حالة التحقّق من STIR/SHAKEN (verstat) للمكالمات الواردة. يتم تقديم هذه المعلومات كجزء من تفاصيل المكالمات للمكالمات الواردة.
إذا كان CallScreeningService يملك إذن
READ_CONTACTS،
يتم إشعار التطبيق عند ورود مكالمات من رقم في جهات اتصال المستخدم أو
إجراء مكالمات صادرة إلى رقم في جهات اتصال المستخدم.
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة منع انتحال هوية المتصل.
تعديلات على Open Mobile API
لمزيد من المعلومات حول توافق واجهة OMAPI مع Android 11 والإصدارات الأحدث، يُرجى الاطّلاع على توافق قارئ واجهة برمجة التطبيقات Open Mobile API.
شبكات VPN عالية الأداء
يمكن للتطبيقات التي تستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات أو التي تعمل على أجهزة تم إطلاقها على المستوى 29 أو أعلى لواجهة برمجة التطبيقات تطبيق IKEv2/IPsec على شبكات VPN لكل من شبكات VPN التي يضبطها المستخدم وشبكات VPN المستندة إلى التطبيقات.
تعمل شبكات VPN بشكل أصلي على نظام التشغيل، ما يسهّل الرمز البرمجي المطلوب لإنشاء اتصالات عبر شبكة VPN باستخدام بروتوكول IKEv2/IPsec في أحد التطبيقات.
التحكّم في الوصول إلى الشبكة لكل عملية
لمزيد من المعلومات حول تفعيل الوصول إلى الشبكة لكل عملية، يُرجى الاطّلاع على إدارة استخدام الشبكة.
السماح بإعدادات Passpoint متعددة مثبّتة مع اسم النطاق المؤهَّل بالكامل (FQDN) نفسه
اعتبارًا من الإصدار 11 من نظام التشغيل Android، يمكنك استخدام
PasspointConfiguration.getUniqueId()
للحصول على معرّف فريد لعنصر PasspointConfiguration، ما يتيح
لمستخدمي تطبيقك تثبيت ملفات شخصية متعددة باستخدام اسم النطاق المؤهّل بالكامل (FQDN) نفسه.
تكون هذه الوظيفة مفيدة عندما ينشر مشغّل شبكة الجوّال أكثر من تركيبة واحدة من رمز البلد حيث يتم تشغيل شبكة الجوّال (MCC) ورمز شبكة الجوّال (MNC) على شبكته، ولكن لديه اسم نطاق مؤهَّل بالكامل (FQDN) واحد فقط. على نظام التشغيل Android 11 والإصدارات الأحدث، يمكن تثبيت أكثر من ملف شخصي واحد باستخدام اسم النطاق المؤهَّل بالكامل (FQDN) نفسه الذي سيتطابق مع الشبكة كمقدّم خدمة منزلي عندما يثبّت المستخدم شريحة SIM مع رمز البلد للهاتف الجوّال (MCC) أو رمز شبكة الجوّال (MNC).
دعم هوائي GNSS
يقدّم Android 11 فئة
GnssAntennaInfo، والتي تتيح لتطبيقك الاستفادة بشكل أكبر من تحديد الموقع الجغرافي بدقة السنتيمتر الذي يمكن أن يوفّره نظام القمر الصناعي للملاحة العالمية (GNSS).
يمكنك الاطّلاع على مزيد من المعلومات في الدليل حول معلومات معايرة الهوائي.
الرسومات
أداة فك ترميز الصور في NDK
توفّر واجهة برمجة التطبيقات ImageDecoder في NDK واجهة برمجة تطبيقات عادية لتطبيقات C/C++ على Android لفك ترميز الصور مباشرةً. لم يعُد مطوّرو التطبيقات بحاجة إلى استخدام واجهات برمجة التطبيقات الخاصة بإطار العمل (من خلال JNI) أو تجميع مكتبات فك ترميز الصور التابعة لجهات خارجية. لمزيد من المعلومات، يُرجى الاطّلاع على
دليل مطوّري برامج فك ترميز الصور.
واجهة برمجة التطبيقات Frame rate
يوفّر 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 Emulator
للحصول على معلومات حول الدعم الموسّع للكاميرات في المحاكي بدءًا من الإصدار 11 من نظام التشغيل Android، يُرجى الاطّلاع على دعم الكاميرا.
إتاحة استخدام أكثر من كاميرا في الوقت نفسه
يضيف Android 11 واجهات برمجة تطبيقات للاستعلام عن إمكانية استخدام أكثر من كاميرا في الوقت نفسه، بما في ذلك الكاميرا الأمامية والخلفية.
للتحقّق من توفّر الدعم على الجهاز الذي يعمل عليه تطبيقك، استخدِم الطرق التالية:
getConcurrentCameraIds()تعرضSetمن مجموعات معرّفات الكاميرات التي يمكنها البث بشكل متزامن مع مجموعات بث مضمونة عند ضبطها من خلال عملية التطبيق نفسها.isConcurrentSessionConfigurationSupported()تستعلم عما إذا كانت أجهزة الكاميرا يمكنها دعم إعدادات الجلسة المقابلة بشكل متزامن.
دعم أفضل لصور HEIF التي تحتوي على إطارات متعددة
بدءًا من الإصدار Android 11، إذا طلبت ImageDecoder.decodeDrawable() ومرّرت صورة HEIF تحتوي على تسلسل من اللقطات (مثل صورة متحركة أو صورة متسلسلة)، ستعرض الطريقة AnimatedImageDrawable يحتوي على تسلسل الصور بالكامل. في الإصدارات السابقة من Android، كانت الطريقة تعرض BitmapDrawable لإطار واحد فقط.
إذا كان ملف HEIF يحتوي على إطارات متعددة ليست في تسلسل، يمكنك استرداد إطار فردي من خلال استدعاء MediaMetadataRetriever.getImageAtIndex().
تسهيل الاستخدام
تعديلات لمطوّري خدمات تسهيل الاستخدام
إذا أنشأت خدمة مخصّصة لتسهيل الاستخدام، يمكنك استخدام الميزات التالية في Android 11:
- أصبح الشرح الموجّه للمستخدمين حول خدمة تسهيل الاستخدام يسمح الآن باستخدام HTML والصور بالإضافة إلى النص العادي. تسهّل هذه المرونة شرح وظيفة الخدمة وكيفية الاستفادة منها للمستخدمين النهائيين.
- للعمل مع وصف لحالة عنصر في واجهة المستخدم الذي يكون أكثر دلالة من الناحية الدلالية من
contentDescription، قم باستدعاء الأسلوبgetStateDescription(). - لطلب تجاوز أحداث اللمس لمستكشف اللمس في النظام، يمكنك استدعاء
setTouchExplorationPassthroughRegion(). وبالمثل، لطلب تجاوز الإيماءات لبرنامج رصد الإيماءات في النظام، يمكنك استدعاءsetGestureDetectionPassthroughRegion(). - يمكنك طلب إجراءات "محرّر أسلوب الإدخال"، مثل "إدخال" و"التالي"، بالإضافة إلى لقطات شاشة للنوافذ التي لا تفعّل علامة
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 المتزايد من خلال ADB، ما يسرّع عملية تثبيت حِزم APK.
فلاتر الأهداف الديناميكية
لتلقّي intents، يجب أن يحدّد التطبيق في وقت التجميع أنواع البيانات التي يمكنه تلقّيها من خلال تحديد intent filter في بيان التطبيق. في الإصدار Android 10 والإصدارات الأقدم، لا يمكن للتطبيقات تغيير فلاتر الأهداف أثناء التشغيل. وهذا يمثّل مشكلة لتطبيقات المحاكاة الافتراضية (مثل الأجهزة الافتراضية وأجهزة الكمبيوتر البعيدة) لأنّها لا تملك طريقة لمعرفة البرامج التي سيثبّتها المستخدم بداخلها بالضبط.
يقدّم Android 11 مجموعات MIME، وهي عنصر بيان جديد يسمح للتطبيق بتعريف مجموعة ديناميكية من أنواع MIME في intent filter وتعديلها آليًا في وقت التشغيل. لاستخدام مجموعة 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 تحسينات لخدمات الملء التلقائي.
معرّفات التلميحات في AssistStructure.ViewNode
غالبًا ما يكون من المفيد لخدمات الملء التلقائي حساب تجزئة توقيع لطريقة عرض
استنادًا إلى خصائص طريقة العرض. تلميح العرض هو سمة جيدة بشكل خاص لتضمينها عند حساب تجزئة التوقيع، ولكن قد تتغير سلسلة التلميح مع لغة الهاتف. لحلّ هذه المشكلة، يوسّع Android 11
AssistStructure.ViewNode
باستخدام طريقة
getHintIdEntry()
جديدة، والتي تعرض معرّف المورد لنص تلميح العرض. وتوفّر هذه الطريقة قيمة مستقلة عن اللغة يمكنك استخدامها لحساب تجزئات التوقيع.
أحداث مجموعات البيانات المعروضة
لمساعدة خدمات الملء التلقائي في تحسين اقتراحاتها، يوفّر نظام التشغيل Android 11 طريقة
لتحديد الحالات التي قدّمت فيها خدمة الملء التلقائي مجموعات بيانات ولكن لم يختَر المستخدم
أيًا منها. في Android 11،
يُبلغ FillEventHistory
عن نوع حدث
TYPE_DATASETS_SHOWN
جديد. يسجّل FillEventHistory حدثًا من هذا النوع كلما قدّمت خدمة الملء التلقائي مجموعة بيانات واحدة أو أكثر للمستخدم. يمكن لخدمات الملء التلقائي استخدام
هذه الأحداث مع حدث
TYPE_DATASET_SELECTED
الحالي لتحديد ما إذا كان المستخدم قد اختار أيًا من خيارات الملء التلقائي
المتاحة.
دمج أداة IME
يمكن الآن للوحات المفاتيح وأدوات IME الأخرى عرض اقتراحات الملء التلقائي بشكل مضمّن، أو في شريط اقتراحات أو واجهة مشابهة، بدلاً من عرضها في قائمة منسدلة. لحماية المعلومات الحسّاسة، مثل كلمات المرور وأرقام بطاقات الائتمان، يتم عرض الاقتراحات للمستخدم ولكن لا تكون معروفة لمحرر أسلوب الإدخال إلى أن يختار المستخدم أحدها. للحصول على معلومات حول كيفية إتاحة أدوات IME وخدمات إدارة كلمات المرور لهذه الميزة، يُرجى الاطّلاع على مقالة دمج ميزة الملء التلقائي مع لوحات المفاتيح.
مشاركة البيانات مع خدمة تصوير المحتوى
بدءًا من الإصدار Android 11، يمكن لتطبيقك مشاركة البيانات مع خدمة التقاط المحتوى على الجهاز. تسهّل هذه الميزة على الجهاز تقديم معلومات ذكية في السياق، مثل عرض اسم أغنية يتم تشغيلها حاليًا في بيئة المستخدم.
لإتاحة البيانات من تطبيقك لخدمة التقاط المحتوى، يمكنك استدعاء الطريقة
shareData()
على مثيل من ContentCaptureManager. إذا وافق النظام على طلب مشاركة البيانات، سيتلقّى تطبيقك واصِف ملف للكتابة فقط لمشاركته مع خدمة التقاط المحتوى.