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

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

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

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

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

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

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

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

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

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

adb install --incremental

قبل تثبيت حزمة APK متزايدة من خلال ADB، يجب توقيع حزمة APK وإنشاء ملف الإصدار 4 من نظام توقيع APK. يجب وضع ملف التوقيع بالإصدار 4 من Google بجانب حزمة 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 الحرارية، ويمكنك استخدامها لتلقّي إشعارات بأي تغيير في الحالة الحرارية أو لاستطلاع آراء الحالة الحالية مباشرةً.

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

تحسينات على انتقال أداة IME

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

تشمل التغييرات البارزة التي تم إجراؤها على إصدارات المكتبة الجديدة ما يلي:

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

الوسائط

تخصيص مخازن مؤقتة لـ MediaCodec

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

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

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

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

فك الترميز بزمن انتقال قصير في MediaCodec

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

لتفعيل أو إيقاف عملية فك الترميز بزمن انتقال سريع، يمكنك تنفيذ أيّ من الإجراءَين التاليَين:

الدالة Aaudio الجديدة AaudioStream_Release()

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

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

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

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

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

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

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

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

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

أداة تبديل الإخراج

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

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

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

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

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

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

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

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

إشعارات فحص المكالمات

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

للتحقّق من التوافق مع الجهاز الذي يتم تشغيل تطبيقك عليه، استخدِم الطرق التالية:

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

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

بدءًا من نظام التشغيل Android 11، إذا استدعيت ImageDecoder.decodeDrawable() وعرضت صورة HEIF تحتوي على سلسلة من الإطارات (مثل الصورة المتحركة أو صورة متسلسلة)، ستعرض الطريقة AnimatedImageDrawable تحتوي على تسلسل الصور بالكامل. في الإصدارات السابقة من نظام التشغيل Android، عرضت الطريقة BitmapDrawable من إطار واحد فقط.

إذا كان رسم HEIF يحتوي على عدة إطارات ليست في تسلسل، يمكنك استرداد إطار فردي من خلال استدعاء MediaMetadataRetriever.getImageAtIndex().

تسهيل الاستخدام

آخر الأخبار لمطوّري خدمات تسهيل الاستخدام

إذا أنشأت خدمة مخصّصة لتسهيل الاستخدام، يمكنك استخدام الميزات التالية في نظام التشغيل Android 11:

  • يسمح الآن الشرح الذي تواجهه خدمة إمكانية الوصول بـ HTML والصور بالإضافة إلى نص عادي. تسهّل هذه المرونة شرح للمستخدمين ما تفعله خدمتك وكيف يمكن أن تساعدهم.
  • للتعامل مع وصف لحالة عنصر واجهة المستخدم ذات معنى أكثر من الناحية الدلالية من contentDescription، عليك استدعاء الطريقة getStateDescription().
  • لطلب أن تتجاوز أحداث اللمس مستكشف اللمس في النظام، اتصل بـ setTouchExplorationPassthroughRegion(). وبالمثل، لطلب أن تتجاوز الإيماءات أداة رصد الإيماءات في النظام، يمكنك استدعاء setGestureDetectionPassthroughRegion().
  • يمكنك طلب إجراءات أداة IME، مثل Enter وnext"، بالإضافة إلى لقطات شاشة للنوافذ التي لا تفعّل علامة FLAG_SECURE.

ميزات إضافية

أسباب الخروج من عمليات التطبيق

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

تعرض الطريقة getHistoricalProcessExitReasons() مثيلات للفئة ApplicationExitInfo التي تحتوي على معلومات ذات صلة بانتهاء عملية التطبيق. من خلال استدعاء getReason() في مثيل من هذه الفئة، يمكنك تحديد سبب إنهاء عملية تطبيقك. على سبيل المثال، تشير القيمة المعروضة REASON_CRASH إلى حدوث استثناء لم تتم معالجته في تطبيقك. إذا كان تطبيقك يحتاج إلى ضمان التفرُّد لأحداث الخروج، يمكنه الاحتفاظ بمعرّف خاص بالتطبيق، مثل قيمة تجزئة تستند إلى الطابع الزمني من طريقة getTimestamp().

مراجع إضافية

للحصول على مزيد من المعلومات، يُرجى الاطّلاع على المقالة حول أدوات Android 11 الجديدة التي تجعل التطبيقات أكثر خصوصية وثباتًا على Medium.

أدوات تحميل الموارد

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

عناصر ResourcesLoader هي حاويات توفّر كائنات ResourcesProvider لمثيل Resources للتطبيق. في المقابل، توفر كائنات ResourcesProvider طرقًا لتحميل بيانات الموارد من APK وجداول الموارد.

إنّ إحدى حالات الاستخدام الأساسية لواجهة برمجة التطبيقات هذه هي تحميل مواد العرض المخصَّصة. يمكنك استخدام loadFromDirectory() لإنشاء ResourcesProvider يعيد توجيه درجة الدقة للموارد ومواد العرض المستندة إلى الملفات، ما يجعله يبحث في دليل محدد بدلاً من ملف APK. يمكنك الوصول إلى مواد العرض هذه من خلال مجموعة طرق open() من فئة واجهة برمجة التطبيقات AssetManager، تمامًا كما هو الحال مع مواد العرض المجمّعة في حزمة APK.

الإصدار 4 من مخطّط توقيع APK

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

فلاتر الأهداف الديناميكية

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

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

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

قيمة السمة android:mimeGroup هي معرّف سلسلة عشوائي يحدّد مجموعة MIME في وقت التشغيل. يمكنك الوصول إلى محتوى مجموعة MIME وتعديله من خلال إدخال رقم تعريفها إلى الطرق الجديدة التالية في فئة واجهة برمجة تطبيقات PackageManager:

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

تحسينات الملء التلقائي

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

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

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

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

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

دمج أداة IME

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

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

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

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