نظرة عامة على الميزات وواجهات برمجة التطبيقات

يقدّم 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:

مؤشرات مرئية لشبكة الجيل الخامس

للحصول على معلومات عن عرض مؤشرات شبكة الجيل الخامس على أجهزة المستخدمين، يمكنك الاطّلاع على إعلام المستخدمين عند استخدامهم لشبكة الجيل الخامس.

الخصوصية

يفرض نظام التشغيل Android 11 عددًا كبيرًا من التغييرات والقيود لتحسين خصوصية المستخدم. لمزيد من المعلومات، يُرجى الانتقال إلى صفحة الخصوصية.

الأمان

إشعارات المصادقة بالمقاييس الحيوية

لمساعدتك في التحكّم في مستوى أمان بيانات تطبيقك، يوفّر Android 11 العديد من التحسينات على المصادقة باستخدام المقاييس الحيوية. تظهر هذه التغييرات أيضًا في مكتبة المقاييس الحيوية في Jetpack.

أنواع المصادقة

يقدّم Android 11 واجهة BiometricManager.Authenticators التي يمكنك استخدامها للتعريف عن أنواع المصادقة التي يتيحها تطبيقك.

تحديد نوع المصادقة الذي تم استخدامه

بعد أن يجري المستخدم المصادقة، يمكنك التحقّق مما إذا كان المستخدم قد تمت المصادقة عليه باستخدام بيانات اعتماد الجهاز أو بيانات اعتماد المقاييس الحيوية من خلال طلب البيانات من getAuthenticationType().

دعم إضافي لمفاتيح المصادقة لكل استخدام

يوفّر نظام التشغيل Android 11 مزيدًا من الدعم للمصادقة باستخدام مفاتيح المصادقة لكل استخدام.

طرق متوقّفة نهائيًا

يوقِف نظام Android 11 نهائيًا الطرق التالية:

  • تمثّل هذه السمة الطريقة setDeviceCredentialAllowed().
  • تمثّل هذه السمة الطريقة setUserAuthenticationValidityDurationSeconds().
  • الإصدار الذي تم تحميله بشكل زائد من canAuthenticate() ولا يتطلب أي وسيطات.

المشاركة الآمنة لمجموعات البيانات الكبيرة

في بعض الحالات، مثل تلك التي تتضمّن تعلُّم الآلة أو تشغيل الوسائط، قد يحتاج تطبيقك إلى استخدام مجموعة البيانات الكبيرة نفسها المستخدَمة في تطبيق آخر. في الإصدارات السابقة من Android، كان كل من تطبيقك وتطبيق آخر بحاجة إلى تنزيل نسخة منفصلة من مجموعة البيانات نفسها.

للمساعدة في تقليل تكرار البيانات، سواء على الشبكة أو على القرص، يسمح Android 11 بتخزين مجموعات البيانات الكبيرة هذه مؤقتًا على الجهاز باستخدام ملفات ثنائية كبيرة للبيانات المشتركة. لمعرفة المزيد من المعلومات حول مشاركة مجموعات البيانات، راجِع الدليل المفصّل حول مشاركة مجموعات البيانات الكبيرة.

إجراء تشفير مستند إلى الملف بعد إعادة تشغيل OTA بدون بيانات اعتماد المستخدم

بعد أن يكمل الجهاز تحديث OTA ويعيد تشغيله، تصبح المفاتيح المشفرة ببيانات الاعتماد (CE) التي يتم وضعها في وحدة التخزين المحمية ببيانات الاعتماد متاحة على الفور لعمليات التشفير المستند إلى الملف (FBE). وهذا يعني أنه بعد إجراء تحديث عبر الهواء، يمكن لتطبيقك استئناف العمليات التي تتطلب مفاتيح CE قبل إدخال المستخدم لرقم التعريف الشخصي أو النقش أو كلمة المرور.

الأداء والجودة

تصحيح الأخطاء اللاسلكي

يتيح نظام التشغيل Android 11 نشر تطبيقك وتصحيح الأخطاء فيه لاسلكيًا من محطة العمل عبر Android Debug Bridge (adb). على سبيل المثال، يمكنك نشر تطبيقك الذي يمكن تصحيح الأخطاء فيه على عدة أجهزة بعيدة بدون توصيل جهازك فعليًا عبر USB والمشاكل الشائعة في اتصال USB، مثل تثبيت برنامج التشغيل. لمزيد من المعلومات، يُرجى الاطّلاع على تشغيل التطبيقات على جهاز.

تثبيت ADB الإضافي لحِزم APK

يمكن أن يستغرق تثبيت حِزم APK كبيرة (+2 غيغابايت) على أحد الأجهزة وقتًا طويلاً، حتى إذا تم إجراء تغيير بسيط فقط على أحد التطبيقات. يؤدي تثبيت حزمة APK الإضافية (Android Debug Bridge) إلى تسريع هذه العملية من خلال تثبيت عدد كافٍ من حزمة APK لتشغيل التطبيق أثناء بث البيانات المتبقية في الخلفية. سيستخدم adb install هذه الميزة تلقائيًا إذا كان متوافقًا مع الجهاز وكان لديك أحدث إصدار من أدوات النظام الأساسي لحزمة تطوير البرامج (SDK). وإذا لم تكن متوافقة، فسيتم استخدام طريقة التثبيت الافتراضية تلقائيًا.

استخدِم أمر adb التالي لاستخدام الميزة. وإذا كان الجهاز لا يتيح التثبيت التزايدي، يتعذّر تنفيذ الأمر ويعرض شرحًا مطوّلاً.

adb install --incremental

قبل تثبيت حزمة APK متزايدة من خلال ADB، يجب توقيع حزمة APK وإنشاء ملف الإصدار 4 من مخطّط توقيع حِزم APK. يجب وضع ملف توقيع الإصدار 4 بجانب حزمة APK لكي تعمل هذه الميزة.

اكتشاف الخطأ باستخدام أداة تخصيص الذاكرة الأصلية

GWP-ASan هي ميزة أصلية لتخصيص الذاكرة تساعد في العثور على أخطاء الاستخدام بعد تفريغ المخزن المؤقت وتجاوز سعة ذاكرة التخزين المؤقت. يمكنك تفعيل هذه الميزة على مستوى العالم أو لعمليات فرعية محدّدة لتطبيقك. لمزيد من المعلومات، راجِع دليل GWP-Asan.

واجهة برمجة التطبيقات للشبكات العصبية، الإصدار 1.3

يعمل Android 11 على توسيع واجهة برمجة تطبيقات الشبكات العصبية (NNAPI) وتحسين أدائها.

عمليات جديدة

يقدّم الإصدار NNAPI 1.3 نوعًا جديدًا من المعاملات، وهو TENSOR_QUANT8_ASYMM_SIGNED، للتوافق مع مخطط الكمي الجديد في TensorFlow Lite.

بالإضافة إلى ذلك، يقدم NNAPI 1.3 العمليات الجديدة التالية:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

عناصر تحكّم جديدة في تعلُّم الآلة

يقدم NNAPI 1.3 عناصر تحكم جديدة للمساعدة في تشغيل التعلم الآلي بسلاسة:

واجهة برمجة التطبيقات NDK Thermal API

عندما ترتفع درجة حرارة الأجهزة بشكل كبير، قد تهدد طاقة وحدة المعالجة المركزية (CPU) و/أو وحدة معالجة الرسومات، وقد يؤثِّر ذلك على التطبيقات بطرق غير متوقَّعة. ومن المرجح أن تواجه بعض المشكلات في التطبيقات أو الألعاب التي تتضمن رسومات معقدة أو حوسبة معقدة أو نشاط شبكة مستمر.

ويمكنك استخدام NDK Thermal API في نظام التشغيل Android 11 لمراقبة التغيُّرات في درجات الحرارة على الجهاز، ثم اتخاذ الإجراءات اللازمة للحفاظ على استهلاك أقل للطاقة وخفض درجة حرارة الجهاز. تشبه واجهة برمجة التطبيقات هذه Java Thermal API، حيث يمكنك استخدامها لتلقّي إشعارات بشأن أي تغيُّر في الحالة الحرارية أو للاطّلاع على الحالة الحالية مباشرةً.

النص والإدخال

عمليات نقل محسَّنة لأداة IME

يوفّر Android 11 واجهات برمجة تطبيقات جديدة لتحسين عمليات الانتقال لمحرّري أساليب الإدخال (IMEs)، مثل لوحات المفاتيح على الشاشة. وتسهّل واجهات برمجة التطبيقات هذه ضبط محتوى التطبيق بالتزامن مع مظهر أداة 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 من مكتبة IU، مقارنةً بالإصدار 63 في Android 10. يتضمن إصدار المكتبة الجديد بيانات مُعدَّلة للغة CLDR وعددًا من التحسينات لدعم التدويل في Android.

تشمل التغييرات الملحوظة في إصدارات المكتبة الجديدة ما يلي:

  • تتيح العديد من واجهات برمجة التطبيقات للتنسيق حاليًا استخدام نوع عنصر إرجاع جديد يوسّع نطاق FormattedValue.
  • تم تحسين واجهة برمجة التطبيقات LocaleMatcher من خلال فئة أداة إنشاء، وتتوافق مع النوع java.util.Locale، وفئة نتائج تعرض بيانات إضافية حول مطابقة.
  • أصبح الترميز Unicode 13 متاحًا الآن.

الوسائط

تخصيص الموارد الاحتياطية MediaCodec

يتضمّن Android 11 واجهات MediaCodec جديدة لبرمجة التطبيقات تتيح للتطبيقات إمكانية التحكّم بشكل أكبر عند تخصيص مخازن مؤقتة للإدخالات والمخرجات. ويسمح هذا للتطبيق بإدارة الذاكرة بكفاءة أكبر.

صفوف جديدة:
الطرق الجديدة:

بالإضافة إلى ذلك، تغيّر سلوك طريقتَين في MediaCodec.Callback():

onInputBufferAvailable()
بدلاً من طلب MediaCodec.getInputBuffer() وMediaCodec.queueInputBuffer() من خلال الفهرس، إذا تم ضبطهما على استخدام Block Model API، يجب أن تستخدم التطبيقات القيمة MediaCodec.getQueueRequest مع الفهرس، مع إرفاق خطّين خطي/بأداة Buffer بالخانة.
onOutputBufferAvailable()
بدلاً من استدعاء MediaCodec.getOutputBuffer() مع الفهرس، قد تستخدم التطبيقات MediaCodec.getOutputFrame() مع الفهرس للحصول على الكائن OutputFrame بمزيد من المعلومات والمخزن المؤقت LinearBlock/DEVICEBuffer.

فكّ الترميز في وقت الاستجابة السريع في MediaCodec

يحسّن Android 11MediaCodec لإتاحة فك الترميز في وقت الاستجابة السريع للألعاب والتطبيقات الأخرى التي تعمل في الوقت الفعلي. يمكنك التحقّق مما إذا كان برنامج الترميز يتيح فكّ الترميز في وقت الاستجابة البطيء من خلال تمرير الرمز FEATURE_LowLatency إلى MediaCodecInfo.CodecCapabilities.isFeatureSupported().

لتفعيل فكّ الترميز باستخدام وقت الاستجابة السريع أو إيقافه، اتّبِع إحدى الخطوتَين التاليتَين:

وظيفة AAudioStream_release() الجديدة

تؤدي الدالة AAudioStream_close() إلى إصدار بث صوتي وإغلاقه في الوقت نفسه. قد تكون هذه المعلومات خطيرة. وإذا حاولَت عملية أخرى الوصول إلى البث بعد إغلاقه، ستتعطّل العملية.

تؤدي الدالة الجديدة AAudioStream_release() إلى إصدار ساحة المشاركات ولكن لا تغلقها. يؤدي ذلك إلى تحرير موارده ويترك البث في حالة معروفة. يظل الكائن مستمرًا حتى يتم طلب AAudioStream_close().

واجهة برمجة تطبيقات MediaParser

MediaParser هي واجهة برمجة تطبيقات جديدة منخفضة المستوى لاستخراج الوسائط. وهو أكثر مرونةً من MediaStreamor ويتيح تحكمًا إضافيًا في وظيفة استخراج الوسائط.

التقاط الصوت من جهاز USB

عندما يستخدم تطبيق بدون إذن RECORD_AUDIO UsbManager لطلب الوصول المباشر إلى جهاز صوت USB يتضمن إمكانية التقاط الصوت (مثل سماعة رأس USB)، تظهر رسالة تحذير جديدة تطلب من المستخدم تأكيد الإذن لاستخدام الجهاز. يتجاهل النظام أي خيار "للاستخدام دائمًا"، لذا يجب على المستخدم الإقرار بالتحذير ومنح الإذن في كل مرة يطلب فيها أحد التطبيقات الوصول.

لتجنُّب هذا السلوك، يجب أن يطلب تطبيقك إذن RECORD_AUDIO.

الوصول المتزامن إلى الميكروفون

يضيف Android 11 طرقًا جديدة إلى واجهات برمجة التطبيقات AudioRecord وMediaRecorder وAAudioStream. وتتيح هذه الطرق إمكانية تسجيل البيانات بشكل متزامن بغض النظر عن حالة الاستخدام المحددة. راجِع مشاركة إدخال الصوت.

أداة التبديل بين أجهزة التشغيل

ينفِّذ Android 11 سلوكًا جديدًا للتطبيقات التي تستخدم واجهات برمجة التطبيقات cast وmediarouter.

بالإضافة إلى إمكانية الوصول إلى خيارات البث من داخل تطبيق، تظهر خيارات التبديل أيضًا في مشغّل وسائط النظام. ويساعد ذلك في منح المستخدم رحلة سلسة عند التنقل بين الأجهزة أثناء تغيير سياقات المشاهدة والاستماع إليه، مثل مشاهدة الفيديو في المطبخ مقابل على الهاتف أو الاستماع إلى الصوت في المنزل أو السيارة. راجِع أداة التبديل بين أجهزة التشغيل.

إمكانية الاتصال

تحسينات على نقطة مرور Wi-Fi

للحصول على معلومات عن إمكانات "نقطة المرور" المُضافة في الإصدار 11 من نظام Android، يُرجى الاطّلاع على المقالة نقطة مرور.

توسيع واجهة برمجة تطبيقات اقتراحات Wi-Fi

يوسِّع نظام Android 11 واجهة برمجة تطبيقات اقتراحات Wi-Fi لتعزيز إمكانات إدارة الشبكة في تطبيقك، بما في ذلك ما يلي:

  • يمكن لتطبيقات إدارة إمكانية الاتصال إدارة شبكاتها الخاصة من خلال السماح بطلبات إلغاء الربط.
  • تم دمج شبكات نقاط المرور في واجهة برمجة تطبيقات الاقتراحات ويمكن اقتراحها للمستخدم.
  • تمكّنك واجهات برمجة التطبيقات في "إحصاءات Google" من الحصول على معلومات عن جودة شبكاتك.

إشعارات خدمة CallScreeningService

بدءًا من نظام التشغيل Android 11، يمكن من خلال CallScreeningService طلب معلومات حول حالة التحقق STIR/SHAKEN (فيرستات) الخاصة بالمكالمات الواردة. يتم توفير هذه المعلومات كجزء من تفاصيل المكالمات للمكالمات الواردة.

إذا كان CallScreeningService حاصلاً على إذن READ_CONTACTS، سيتم إشعار التطبيق عند تلقّي مكالمات واردة من رقم ضمن جهات اتصال المستخدم أو عند تلقّي مكالمات صادرة إليه.

لمزيد من المعلومات، يُرجى الاطّلاع على منع انتحال رقم المتّصل.

فتح تحديثات Mobile API

للحصول على معلومات حول دعم OMAPI على نظام التشغيل Android 11 والإصدارات الأحدث، يُرجى الاطّلاع على فتح دعم برامج قراءة واجهة برمجة تطبيقات الجوّال.

شبكات VPN ذات الأداء العالي

ويمكن للتطبيقات التي تستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات أو التي تعمل على أجهزة تم إطلاقها على المستوى 29 من واجهة برمجة التطبيقات والمستويات الأعلى تطبيق بروتوكول IKEv2/IPsec على الشبكات الافتراضية الخاصة لكل من الشبكات الافتراضية الخاصة التي ضبطها المستخدمون وتلك المستندة إلى التطبيقات.

وتعمل الشبكات الافتراضية الخاصة في نظام التشغيل، مما يبسط الرمز المطلوب لإنشاء اتصالات الشبكة الظاهرية الخاصة (VPN) بـ IKEv2/IPsec في أحد التطبيقات.

التحكم في الوصول إلى الشبكة لكل عملية

للحصول على معلومات عن تفعيل الوصول إلى الشبكة على أساس كل عملية، اطّلِع على إدارة استخدام الشبكة.

السماح بضبط العديد من إعدادات نقطة المرور المثبَّتة باستخدام اسم النطاق المؤهل بالكامل

بدءًا من نظام التشغيل Android 11، يمكنك استخدام PasspointConfiguration.getUniqueId() للحصول على معرّف فريد لعنصر PasspointConfiguration، ما يتيح لمستخدمي تطبيقك تثبيت ملفات شخصية متعددة باستخدام اسم النطاق المؤهل بالكامل (FQDN) نفسه.

ويمكن الاستفادة من هذه الوظيفة عندما ينشر مشغّل شبكة الجوّال أكثر من تركيبة واحدة تضمّ رمز بلد الجوّال (مركز عملائي) ورمز شبكة الجوّال (MNC) على شبكته، ولكن مع تضمين اسم FQDN واحد فقط. في نظام التشغيل Android 11 والإصدارات الأحدث، من الممكن تثبيت أكثر من ملف شخصي واحد له نفس اسم النطاق المؤهل بالكامل والذي سيتطابق مع الشبكة كموفّر خدمات المنزل عندما يثبّت المستخدم شريحة SIM إما من خلال مركز عملائي أو حساب MNC.

التوافق مع هوائي GNSS

يقدّم نظام التشغيل Android 11 الفئة GnssAntennaInfo، ما يتيح لتطبيقك إمكانية الاستفادة بشكل أكبر من تحديد الموضع بالسنتيمترات التي يمكن أن يوفّرها نظام القمر الصناعي العالمي للتنقل (GNSS).

يمكنك الاطّلاع على المزيد من المعلومات في الدليل المتعلّق بمعلومات معايرة الهوائي.

الرسومات

برنامج فك ترميز صور NDK

توفّر واجهة برمجة تطبيقات NDK ImageDecoder واجهة برمجة تطبيقات عادية لتطبيقات 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.

للحصول على معلومات عن التوافق الموسَّع للكاميرات في المحاكي بدءًا من الإصدار 11 من نظام Android، يُرجى الاطّلاع على التوافق مع الكاميرا.

إتاحة الاستخدام المتزامن لأكثر من كاميرا واحدة

يُضيف Android 11 واجهات برمجة تطبيقات لإتاحة طلب البحث عن استخدام أكثر من كاميرا واحدة في الوقت نفسه، بما في ذلك الكاميرا الأمامية والخلفية.

للتحقّق من توفُّر الدعم على الجهاز الذي يعمل عليه تطبيقك، يمكنك اتّباع الطرق التالية:

  • تعرض getConcurrentCameraIds() Set من مجموعات معرّفات الكاميرات التي يمكن بثها بشكل متزامن مع مجموعات بث مضمونة عند ضبطها من خلال عملية التطبيق نفسها.
  • isConcurrentSessionConfigurationSupported() يستفسر عن ما إذا كان يمكن لأجهزة الكاميرا أن تتوافق مع إعدادات الجلسة ذات الصلة بالتزامن.

توافق أفضل مع صور HEIF التي تتضمّن إطارات متعدّدة

بدءًا من الإصدار 11 من نظام التشغيل Android، عند استدعاء 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 باستخدام Ads Data Hub، ما يؤدي إلى تسريع عملية تثبيت 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 تحسينات على خدمات الملء التلقائي.

معرّفات التلميحات في Assiststructured.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. إذا قبِل النظام طلب مشاركة البيانات، سيتلقّى تطبيقك واصفًا للملفات للكتابة فقط لمشاركته مع خدمة تسجيل المحتوى.