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

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

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

تجارب جديدة

عناصر التحكم بالأجهزة

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

عناصر التحكم في الوسائط

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

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

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

الشاشات

تحسين التوافق مع أجهزة العرض بدون انقطاع

يوفّر نظام التشغيل Android 11 العديد من واجهات برمجة التطبيقات التي تتيح استخدام شاشات العرض المنحنية، وهي شاشات تلتف حول حافة الجهاز. ويتم التعامل مع هذه الشاشات على أنّها شكل مختلف من الشاشات التي تتضمّن فتحات عرض مقطوعة. تعرض الطرق الحالية DisplayCutout.getSafeInset…() الآن الحافة الآمنة لتجنُّب مناطق الشلالات بالإضافة إلى الفتحات. لعرض محتوى تطبيقك في منطقة العرض المتتالي، اتّبِع الخطوات التالية:

  • يُرجى الاتصال على DisplayCutout.getWaterfallInsets() للحصول على الأبعاد الدقيقة للوحة المائية.

  • اضبط سمة تخطيط النافذة layoutInDisplayCutoutMode على LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS للسماح للنافذة بالتوسّع في مناطق الصورة المقطوعة والشاشة المنحنية على جميع حواف الشاشة. يجب التأكّد من عدم وجود أي محتوى أساسي في مناطق القطع أو مناطق الشلال.

أداة استشعار زاوية المفصلة والأجهزة القابلة للطي

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

اطّلِع على الأجهزة القابلة للطي.

المحادثات

تحسينات على المحادثات

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

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

فقاعات المحادثات

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

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

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

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

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

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

الخصوصية

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

الأمان

تعديلات على المصادقة بالمقاييس الحيوية

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

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

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

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

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

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

يتيح نظام التشغيل Android 11 إمكانية أكبر للمصادقة باستخدام مفاتيح المصادقة لكل استخدام.

الطُرق المتوقّفة

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

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

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

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

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

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

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

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

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

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

تثبيت حِزم APK بشكل تدريجي باستخدام أداة Android Debug Bridge (ADB)

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

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

adb install --incremental

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

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

‫GWP-ASan هي ميزة لتخصيص الذاكرة الأصلية تساعد في العثور على الأخطاء المرتبطة باستخدام ذاكرة معيّنة بعد تفريغها (use-after-free) وتجاوز المخزن المؤقت للذاكرة الديناميكية (heap-buffer-overflow). يمكنك تفعيل هذه الميزة على مستوى العالم أو لعمليات فرعية معيّنة في تطبيقك. لمزيد من المعلومات، راجِع دليل GWP-Asan.

Neural Networks API 1.3

يوسّع الإصدار 11 من نظام التشغيل Android ويحسّن واجهة برمجة التطبيقات الخاصة بالشبكات العصبونية (NNAPI).

عمليات جديدة

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

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

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

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

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

NDK Thermal API

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

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

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

تحسين عمليات الانتقال في محرّك طريقة الإدخال

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

لعرض محرر أسلوب الإدخال (IME) عندما يكون أي EditText في وضع التركيز، استدعِ الدالة view.getInsetsController().show(Type.ime()). (يمكنك استدعاء هذه الطريقة في أي طريقة عرض في التدرّج الهرمي نفسه الذي يضم EditText الذي تم التركيز عليه، وليس عليك استدعاؤها في EditText تحديدًا). لإخفاء محرر أسلوب الإدخال، استخدِم الأمر view.getInsetsController().hide(Type.ime()). يمكنك التحقّق مما إذا كان محرّك IME مرئيًا حاليًا من خلال استدعاء view.getRootWindowInsets().isVisible(Type.ime()).

لمزامنة طرق عرض تطبيقك مع ظهور لوحة IME واختفائها، اضبط أداة معالجة على طريقة عرض من خلال توفير WindowInsetsAnimation.Callback إلى View.setWindowInsetsAnimationCallback(). (يمكنك ضبط أداة معالجة الأحداث هذه على أي طريقة عرض، ولا يجب أن تكون EditText.) تستدعي طريقة الإدخال onPrepare() الخاصة بأداة معالجة الأحداث، ثم تستدعي onStart() في بداية الانتقال. ثم يتم استدعاء onProgress() في كل مرحلة من مراحل الانتقال. عند انتهاء عملية الانتقال، يستدعي محرر طريقة الإدخال 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.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().

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

الدالة الجديدة AAudioStream_release() في AAudio

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

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

MediaParser API

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

تسجيل الصوت من جهاز USB

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

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

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

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

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

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

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

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

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

للحصول على معلومات حول إمكانات Passpoint التي تمت إضافتها في Android 11، يُرجى الاطّلاع على Passpoint.

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

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

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

تعديلات على CallScreeningService

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

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

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

تعديلات على Open Mobile API

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

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

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

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

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

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

السماح بإعدادات Passpoint متعدّدة مثبَّتة باستخدام اسم المجال المؤهَّل بالكامل نفسه

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

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

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

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

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

الرسومات

أداة فك ترميز الصور في NDK

توفّر واجهة برمجة التطبيقات ImageDecoder في NDK واجهة برمجة تطبيقات عادية لتطبيقات C/C++ على Android من أجل فك ترميز الصور مباشرةً. لم يعُد على مطوّري التطبيقات استخدام واجهات برمجة التطبيقات الخاصة بإطار العمل (من خلال JNI) أو حِزم مكتبات فك ترميز الصور التابعة لجهات خارجية. لمزيد من المعلومات، يُرجى الاطّلاع على دليل المطوّرين الخاص ببرنامج فك ترميز الصور.

Frame rate API

يتضمّن نظام التشغيل 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)، مثل "إدخال" و"التالي"، بالإضافة إلى لقطات شاشة للنوافذ التي لا تفعّل العلامة 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

يتيح الإصدار 11 من نظام التشغيل Android استخدام الإصدار 4 من مخطّط توقيع حِزم APK. ينتج عن هذا المخطّط نوع جديد من التوقيع في ملف منفصل (apk-name.apk.idsig)، ولكنّه يشبه الإصدارَين 2 و3 من ناحية أخرى. لا يتم إجراء أي تغييرات على حِزمة APK. يتوافق هذا المخطط مع تثبيت حِزم APK بشكل تدريجي باستخدام تصحيح أخطاء Android، ما يؤدي إلى تسريع عملية تثبيت حِزم APK.

فلاتر intent الديناميكية

لكي يتلقّى التطبيق أغراضًا، يجب أن يحدّد في وقت الترجمة أنواع البيانات التي يمكنه تلقّيها من خلال تحديد فلتر الأغراض في بيان التطبيق. في نظام التشغيل 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 API:

عند إضافة نوع MIME إلى مجموعة MIME آليًا، يعمل هذا النوع تمامًا مثل نوع MIME ثابت تم تحديده بشكل صريح في البيان.

تحسينات على ميزة "الملء التلقائي"

يقدّم نظام التشغيل Android 11 تحسينات لخدمات الملء التلقائي.

معرّفات التلميحات في AssistStructure.ViewNode

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

الأحداث التي يتم عرضها في مجموعات البيانات

لمساعدة خدمات الملء التلقائي في تحسين اقتراحاتها، يوفّر نظام التشغيل Android 11 طريقة لتحديد الحالات التي عرضت فيها خدمة الملء التلقائي مجموعات بيانات ولكن لم يختار المستخدم أيًا منها. في نظام التشغيل Android 11، FillEventHistory يُبلغ عن نوع جديد من الأحداث TYPE_DATASETS_SHOWN. تسجِّل FillEventHistory حدثًا من هذا النوع كلّما عرضت خدمة الملء التلقائي مجموعة بيانات واحدة أو أكثر للمستخدم. يمكن لخدمات الملء التلقائي استخدام هذه الأحداث مع حدث TYPE_DATASET_SELECTED الحالي لتحديد ما إذا كان المستخدم قد اختار أيًا من خيارات الملء التلقائي المقدَّمة.

دمج أداة IME

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

مشاركة البيانات مع "خدمة تسجيل المحتوى"

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

لإتاحة البيانات من تطبيقك لخدمة التقاط المحتوى، استدعِ طريقة shareData() في مثيل ContentCaptureManager. إذا قبل النظام طلب مشاركة البيانات، سيتلقّى تطبيقك واصف ملف للقراءة فقط لمشاركته مع خدمة التقاط المحتوى.