ميزات وواجهات برمجة تطبيقات Android 8.0

الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) يقدّم مجموعة متنوعة من ميزات وإمكانات جديدة للمستخدمين والمطوّرين. يُبرز هذا المستند الميزات الجديدة التي تهمّ المطوّرين.

تأكد أيضًا من الاطلاع على التغييرات في السلوك في Android 8.0 للتعرّف على الجوانب التي يتغيّر فيها النظام الأساسي في تطبيقاتك.

انطباع المستخدم

وضع "نافذة ضمن النافذة"

ميزة "نافذة ضمن النافذة" في نظام التشغيل Android 8.0

يسمح نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) بتشغيل الأنشطة في وضع "صورة داخل صورة". نافذة ضمن النافذة (PIP) هي نوع خاص من وضع النوافذ المتعددة يُستخدم في الغالب لتشغيل الفيديو. كان وضع "صورة في صورة" متاحًا في الأصل على Android TV فقط، ولكن مع الإصدار 8.0 من Android، أصبح متاحًا على أجهزة Android الأخرى.

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

لتحديد إمكانية استخدام نشاطك لوضع "نافذة ضمن النافذة"، اضبط android:supportsPictureInPicture على true في البيان. (ابتداءً من Android 8.0، لا يتطلب PIP) سمة البيان android:resizeableActivity ومع ذلك، يجب ضبط android:resizeableActivity على "true" إذا كان نشاطك يتيح استخدام أوضاع متعددة النوافذ أخرى.)

يقدّم الإصدار 8.0 من Android (المستوى 26 لواجهة برمجة التطبيقات) عنصرًا جديدًا، وهو PictureInPictureParams، الذي يتم تمريره إلى طرق وضع "صورة في صورة" لتحديد كيفية سلوك النشاط عندما يكون في وضع "صورة في صورة". يحدّد هذا العنصر سمات مثل نسبة العرض إلى الارتفاع المفضّلة للنشاط.

طرق PIP الحالية الموضحة في الإضافة يمكنك الآن ضبط إعدادات ميزة "نافذة ضمن النافذة". على جميع أجهزة Android، وليس فقط على Android TV بالإضافة إلى ذلك، يوفِّر الإصدار Android 8.0 الطرق التالية لدعمه وضع نافذة ضمن النافذة (PIP):

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): يضع النشاط في وضع "نافذة ضمن النافذة". يحدِّد "args" نسبة العرض إلى الارتفاع للنشاط وإعدادات الضبط الأخرى. في حال توفُّر حقول في args فارغة، يستخدم النظام القيم المحددة في آخر مرة يسمى Activity.setPictureInPictureParams().

    يتم وضع النشاط المحدّد في أحد أركان الشاشة، ويتم ملء بقية الشاشة بالنشاط السابق الذي كان معروضًا على الشاشة. ينتقل النشاط الذي يدخل في وضع PIP إلى حالة الإيقاف المؤقت، ولكنه يظل البدء. إذا نقر المستخدم على نشاط نافذة ضمن النافذة (PIP)، سيعرض النظام قائمة المستخدم للتفاعل معه؛ لا تصل أي أحداث لمس إلى النشاط أثناء في حالة نافذة ضمن النافذة (PIP).

  • Activity.setPictureInPictureParams(): تعديل إعدادات ضبط "وضع الصورة في الصورة" لنشاط معيّن إذا كان النشاط في وضع "صورة داخل صورة" حاليًا، يتم تعديل الإعدادات، ويُعدّ ذلك مفيدًا في حال تغيير نسبة العرض إلى الارتفاع للنشاط. إذا لم يكن النشاط في وضع "صورة في صورة"، يتم استخدام إعدادات الضبط هذه بغض النظر عن طريقة enterPictureInPictureMode() التي يتم استدعاؤها.

الإشعارات

لقد أعدنا تصميم الإشعارات في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، توفير طريقة أسهل وأكثر اتساقًا لإدارة سلوك الإشعارات والإعدادات. وتشمل هذه التغييرات ما يلي:

    قائمة الضغط المطوّل للإشعارات في نظام Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)

    يمكن للمستخدمين الضغط مع الاستمرار على رموز مشغّل التطبيقات لعرض الإشعارات في Android 8.0.

  • قنوات الإشعارات: يقدّم نظام التشغيل Android 8.0 قنوات إشعارات تتيح لك إنشاء قناة يمكن للمستخدم تخصيصها لكل نوع من أنواع الإشعارات التي تريد عرضها. تشير واجهة المستخدم إلى إلى قنوات الإشعارات على أنّها فئات إشعارات. للتعرّف على كيفية تنفيذ قنوات الإشعارات، اطّلِع على مقالة إدارة قنوات الإشعارات.
  • نقاط الإشعارات: يتيح نظام التشغيل Android 8.0 عرض نقاط أو شارات على رموز مشغّل التطبيقات. تعكس نقاط الإشعار وجود إشعارات لم يرفضها المستخدم أو يتخذ أي إجراء بشأنها بعد لمعرفة كيفية استخدام نقاط الإشعارات، اطّلِع على مقالة شارات الإشعارات.
  • التأجيل: يمكن للمستخدمين تأجيل الإشعارات، ما يؤدي إلى اختفائها لمدة زمنية قبل إعادة ظهورها. تظهر الإشعارات مرة أخرى مع المستوى نفسه من الأهمية التي ظهرت بها في البداية. إمكانية إزالة التطبيقات أو تحديثها إشعار مؤجل، ولكن تحديث الإشعار المؤجل لا يتسبب في ليظهر مرة أخرى.
  • مهلات الإشعارات: يمكنك تعيين مهلة عند إنشاء إشعار باستخدام setTimeoutAfter() ويمكنك استخدام هذه الطريقة لتحديد المدة التي يستغرقها الإشعار إلغاء الاشتراك. يمكنك إلغاء إشعار قبل انقضاء مدّة المهلة المحدّدة إذا لزم الأمر.
  • إعدادات الإشعارات: يمكنك استدعاء setSettingsText() لضبط النص الذي يظهر عند إنشاء رابط يؤدي إلى إعدادات الإشعارات في تطبيقك من إشعار باستخدام Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES. قد يقدّم النظام الإضافات التالية بهدف فلترة الإعدادات التي يجب أن يعرضها تطبيقك للمستخدمين: EXTRA_CHANNEL_ID، NOTIFICATION_TAG، وNOTIFICATION_ID.
  • إغلاق الإشعارات: يمكن للمستخدمين إغلاق الإشعارات بأنفسهم، ويمكن للتطبيقات إزالتها آليًا. يمكنك تحديد وقت ظهور إشعار سبب الرفض من خلال تنفيذ طريقة onNotificationRemoved() من صف واحد (NotificationListenerService).
  • ألوان الخلفية: يمكنك ضبط لون خلفية لأحد الإشعارات وتفعيله. يجب ألا تستخدم هذه الميزة إلا في الإشعارات المهام الجارية التي تعد بالغة الأهمية للمستخدم ليراها في لمحة. على سبيل المثال، يمكنك ضبط لون خلفية للإشعارات المتعلّقة باتجاهات القيادة أو مكالمة هاتفية جارية. يمكنك أيضًا تعيين لون الخلفية المطلوب باستخدام setColor() إجراء ذلك تتيح لك هذه السياسة استخدام setColorized() لتفعيل استخدام لون الخلفية للإشعار.
  • نمط المراسلة: في Android 8.0، تعرض الإشعارات التي تستخدم فئة MessagingStyle المزيد من المحتوى في شكلها المصغّر. يجب عليك استخدام صف واحد (MessagingStyle) لمدة الإشعارات المتعلقة بالمراسلة. يمكنك أيضًا استخدام صفحة addHistoricMessage() لتوفير سياق لمحادثة ما عن طريق إضافة الرسائل السابقة إلى الإشعارات المتعلقة بالمراسلة.

إطار عمل الملء التلقائي

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

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

يمكنك اتّخاذ بعض الخطوات لتحسين آلية عمل تطبيقك ضمن إطار العمل. لمزيد من المعلومات راجِع نظرة عامة على إطار عمل الملء التلقائي.

الخطوط القابلة للتنزيل

يتيح لك الإصداران Android 8.0 (مستوى واجهة برمجة التطبيقات 26) والإصدار 26 من مكتبة دعم Android إمكانية طلب خطوط من التطبيق بدلاً من تجميع الخطوط في حزمة APK أو السماح تنزيل الخطوط لـ APK. تعمل هذه الميزة على تقليل حجم حزمة APK وزيادة معدل نجاح تثبيت التطبيق، كما تسمح لعدة تطبيقات بمشاركة الخط نفسه.

لمزيد من المعلومات عن تنزيل الخطوط، يُرجى الرجوع إلى مقالة الخطوط القابلة للتنزيل.

الخطوط في XML

يقدّم Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) ميزة جديدة، "الخطوط في XML"، وهي تتيح لك استخدام الخطوط كموارد. وهذا يعني أنّه لا داعي لتجميع الخطوط كمواد عرض. يتم تجميع الخطوط في ملف R ويتم تجميعها تلقائيًا. المتاحة في النظام كمورد. يمكنك بعد ذلك الوصول إلى هذه الخطوط باستخدام مساعدة بشأن نوع مورد جديد، font.

توفّر مكتبة الدعم 26 دعمًا كاملاً لهذه الميزة على الأجهزة التي تعمل بالإصدار 14 من واجهة برمجة التطبيقات والإصدارات الأحدث.

لمزيد من المعلومات، حول استخدام الخطوط كموارد واسترداد خطوط النظام، راجِع الخطوط في XML.

TextView ذات الحجم التلقائي

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

الرموز التكيُّفية

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

إدارة الألوان

يمكن الآن لمطوّري تطبيقات Android المختصين بتطبيقات التصوير الاستفادة من الأجهزة الجديدة التي تحتوي على شاشة عرض ألوان واسعة النطاق لعرض مجموعة واسعة الصور، يجب على التطبيقات تفعيل علامة في ملف البيان الخاص بها (لكل نشاط) وتحميل صور نقطية باستخدام ملف تعريف لوني عريض مضمن (AdobeRGB، Pro Photo RGB وDCI-P3 وغير ذلك).

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

يوفّر Android 8.0 العديد من واجهات برمجة التطبيقات لمساعدتك في إدارة عناصر WebView التي تعرض محتوى الويب في تطبيقك تعمل واجهات برمجة التطبيقات هذه التي تعمل على تحسين ثبات تطبيقك وأمانه على ما يلي: التالي:

  • Version API
  • Google SafeBrowsing API
  • واجهة برمجة تطبيقات التعامل مع الإنهاء
  • واجهة برمجة التطبيقات الأهمية في Renderer

لمزيد من المعلومات عن كيفية استخدام واجهات برمجة التطبيقات هذه، يمكنك الاطّلاع على إدارة مكوّنات WebView

تشمل الفئة WebView الآن واجهة برمجة تطبيقات للتصفّح الآمن لتحسين مستوى الأمان. من تصفح الويب. لمزيد من المعلومات، يُرجى مراجعة واجهة برمجة تطبيقات Google للتصفّح الآمن:

تثبيت الاختصارات والتطبيقات المصغّرة

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

لمزيد من المعلومات، يمكنك الاطّلاع على دليل ميزة تثبيت التطبيقات المصغّرة والتطبيقات المصغّرة المخصّصة .

الحد الأقصى لنسبة العرض إلى الارتفاع للشاشة

يقدّم الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) تغييرات على طريقة ضبط الحد الأقصى لنسبة العرض إلى الارتفاع في التطبيق.

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

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

دعم الشاشات المتعددة

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

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

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

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

يوفّر ActivityOptions طريقتين جديدتين لتقديم الدعم شاشات متعددة:

setLaunchDisplayId()
يحدّد الشاشة التي يجب عرض النشاط عليها عند تشغيله.
getLaunchDisplayId()
يعرض شاشة الإطلاق الحالية للنشاط.

تم توسيع هيكل adb لدعم الشاشات المتعددة. يمكن الآن استخدام الأمر shell start لبدء نشاط، وتحديد شاشة العرض المستهدَفة للنشاط:

adb shell start <activity_name> --display <display_id>

هوامش تنسيق ومساحّة موحّدة

يسهّل عليك نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) تحديد الحالات التي يستخدم فيها الجانبان المتعاكسان لعنصر View الهامش أو المسافة البادئة نفسها. يمكنك الآن على وجه التحديد استخدام السمات التالية في تنسيق XML الملفات:

ملاحظة: في حال تخصيص منطق تطبيقك ليعمل مع لغات وثقافات مختلفة، بما في ذلك اتجاه النص، يُرجى العِلم أنّه لا تؤثّر هذه السمات في قيم layout_marginStart أو layout_marginEnd أو paddingStart أو paddingEnd. يمكنك تعيين هذه القيم بنفسك، بالإضافة إلى سمات التخطيط الرأسي والأفقي الجديدة، لإنشاء سلوك التخطيط يعتمد ذلك على اتجاه النص

التقاط المؤشر

تستفيد بعض التطبيقات، مثل الألعاب وأجهزة الكمبيوتر المكتبي عن بُعد وعملاء المحاكاة الافتراضية، بشكلٍ كبير من التحكّم في مؤشر الماوس. ميزة "التقاط المؤشر" جديدة ميزة في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) توفّر إمكانية التحكّم هذه من خلال عرض كل أحداث الماوس على عرض مركّز في التطبيق

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

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

فئات التطبيقات

يسمح نظام التشغيل Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) لكل تطبيق بتحديد الفئة التي يندرج تحتها، عند الاقتضاء. تُستخدم هذه الفئات لتجميع التطبيقات المتشابهة معًا أو الغرض أو الوظيفة عند عرضها للمستخدمين، مثل استخدام البيانات أو استخدام البطارية أو استخدام مساحة التخزين. يمكنك تحديد فئة لتطبيقك من خلال ضبط سمة android:appCategory في <application> علامة البيان.

مشغّل تطبيقات Android TV

يتضمّن الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) تجربة جديدة تركّز على المحتوى في شاشة Android TV الرئيسية، وهي متاحة باستخدام emulator لنظام التشغيل Android TV وصورة جهاز Nexus Player لنظام التشغيل Android 8.0. تنظم الشاشة الرئيسية الجديدة محتوى الفيديو في صفوف مقابلة للقنوات، والتي تتم تعبئة كل منها ببرامج من خلال تطبيق على النظام. يمكن للتطبيقات نشر قنوات متعددة، ويمكن للمستخدمين ضبط القنوات التي يريدونها يرغب في رؤيته على الشاشة الرئيسية. تتضمّن شاشة Android TV الرئيسية أيضًا صف "المشاهدة تاليًا"، وهو وتتضمّن برامج من التطبيقات استنادًا إلى عادات المشاهدة الخاصة بالمستخدم يمكن للتطبيقات أيضًا توفير معاينات الفيديوهات، والتي يتم تشغيلها تلقائيًا عندما يركّز المستخدم على أحد البرامج. واجهات برمجة التطبيقات تعبئة القنوات والبرامج هي جزء من واجهات برمجة تطبيقات TvProvider، والتي يتم توزيعها باعتبارها برامج Android وحدة مكتبة الدعم مع الإصدار 8.0 من نظام التشغيل Android.

AnimatorSet

اعتبارًا من الإصدار 8.0 من Android (المستوى 26 من واجهة برمجة التطبيقات)، تتيح واجهة برمجة التطبيقات AnimatorSet الآن إمكانية تقديم أو تأخير الفيديو وتشغيله. يتيح لك الانتقال السريع ضبط موضع مجموعة الصور المتحركة على نقطة زمنية معيّنة. يكون تشغيل الفيديو بالعكس مفيدًا إذا كان تطبيقك يتضمّن رسومًا متحركة لإجراءات يمكن التراجع عنها. بدلاً من تحديد مجموعتَين من الرسوم المتحرّكة المنفصلتَين، يمكنك تشغيل الرسم المتحرّك نفسه بشكل عكسي.

الإدخال والتنقّل

مجموعات التنقل بلوحة المفاتيح

إذا كان أحد الأنشطة في تطبيقك يستخدم تسلسلاً هرميًا معقدًا للعروض، مثل العرض الهرمي الشكل 2، ننصحك بتنظيم مجموعات من عناصر واجهة المستخدم في مجموعات لتسهيل التنقل بلوحة المفاتيح بينها. يمكن للمستخدمين الضغط على Meta+Tab أو Search+Tab على أجهزة Chromebook، للانتقال من مجموعة إلى أخرى. أمثلة جيدة على تشمل المجموعات: اللوحات الجانبية وأشرطة التنقل ومناطق المحتوى الرئيسية والعناصر التي يمكن أن تحتوي على العديد من العناصر الفرعية.

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

لإنشاء عنصر View أو ViewGroup مجموعة عنقودية واحدة، وتعيين android:keyboardNavigationCluster إلى true في ملف XML لتنسيق العنصر، أو تمرير true إلى setKeyboardNavigationCluster() في منطق واجهة المستخدم لتطبيقك.

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

على الأجهزة التي تحتوي على شاشات تعمل باللمس، يمكنك ضبط مجموعة مخصَّصة عنصر واحد (ViewGroup) العنصر android:touchscreenBlocksFocus إلى true من أجل تسمح بالتنقل عبر المجموعات العنقودية فقط من وإلى هذه المجموعة. في حال تطبيق هذا الإعداد على مجموعة، لا يمكن للمستخدمين استخدام مفتاح التبويب (Tab) أو مفاتيح الأسهم للتنقّل داخل المجموعة أو خارجها، بل عليهم الضغط على تركيبة لوحة المفاتيح الخاصة بالتنقّل في المجموعة بدلاً من ذلك.

عرض التركيز التلقائي

في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك تحديد View الذي يجب أن يتلقّى التركيز بعد استئناف نشاط (إعادة) تم إنشاؤه وضغط المستخدم على مفتاح تنقّل في لوحة المفاتيح، مثل مفتاح التبويب. لتطبيق خيار "التركيز التلقائي" الإعداد، اضبط قيمة العنصر View android:focusedByDefault إلى true في تنسيق XML الذي يحتوي على عنصر واجهة المستخدم، أو تم تمريره في true إلى setFocusedByDefault() في ومنطق واجهة المستخدم للتطبيق.

تحويل النص إلى كلام

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

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

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

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

النظام

أدوات الكشف الجديدة بالوضع المتشدد

يضيف نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) ثلاثة أدوات جديدة لرصد أخطاء StrictMode للمساعدة في تحديد الأخطاء المحتمَلة في تطبيقك:

  • سيرصد detectUnbufferedIo() متى يقرأ تطبيقك البيانات أو يكتبها بدون تخزين مؤقت، ما قد يؤثر بشكل كبير في أدائه.
  • الإجراء الذي سينفّذه detectContentUriWithoutPermission() هو رصد الحالات التي ينسى فيها تطبيقك عن غير قصد منح أذونات لتطبيق آخر على بدء نشاط خارج التطبيق.
  • سيرصد detectUntaggedSockets() الحالات التي يؤدي فيها تطبيقك إلى زيادة عدد زيارات الشبكة بدون استخدام setThreadStatsTag(int) لوضع علامة على زياراتك لأغراض debugging .

البيانات المؤقتة

يقدّم نظام Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) إرشادات وسلوكيات أفضل حول البيانات المخزّنة مؤقتًا. يحصل كل تطبيق الآن على حصة مساحة تخزين على القرص للبيانات المخزّنة مؤقتًا، كما تعرضه دالة getCacheQuotaBytes(UUID).

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

هناك أيضًا سلوكان جديدان يمكنك تفعيلهما لكل دليل على حدة للتحكّم في كيفية تحرير النظام للبيانات المخزّنة مؤقتًا:

  • يمكن استخدام StorageManager.setCacheBehaviorAtomic() للإشارة إلى أنه يجب حذف دليل وكل محتوياته كوحدة بسيطة واحدة.
  • يمكن استخدام setCacheBehaviorTombstone(File, boolean) للإشارة إلى أنه بدلاً من حذف الملفات داخل دليل، يجب اقتطاعها لتكون 0 بايت في الطول، مع ترك الملف الفارغ سليمًا.

وأخيرًا، عندما تحتاج إلى تخصيص مساحة على القرص للملفات الكبيرة، يمكنك استخدام واجهة allocateBytes(FileDescriptor, long) API التي ستمحو بياناتها تلقائيًا الملفات المخزّنة مؤقتًا التي تنتمي إلى تطبيقات أخرى (حسب الحاجة) لتلبية طلبك. عند تحديد ما إذا كان الجهاز يتضمّن مساحة كافية على القرص لتخزين بياناتك الجديدة، استخدِم دالة getAllocatableBytes(UUID) بدلاً من استخدام دالة getUsableSpace()، لأنّ الأولى ستأخذ في الاعتبار أي data مخزّنة مؤقتًا يمكن للنظام محوّها نيابةً عنك.

نقل إلى صفحات موفّر المحتوى

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

للحصول على معلومات مفصّلة عن التغييرات التي طرأت على مقدّمي المحتوى، يُرجى الاطّلاع على مقالتَي ContentProvider و ContentProviderClient.

طلبات إعادة تحميل المحتوى

يعمل ContentProvider يشتمل كل صف (ContentResolver) الآن على refresh()، ما يسهِّل على العملاء معرفة ما إذا كان أن تكون المعلومات التي يطلبها محدَّثة.

يمكنك إضافة منطق مخصص لإعادة تحميل المحتوى من خلال تمديد ContentProvider تأكَّد من إلغاء طريقة refresh() لعرض true، ما يشير إلى عملاء مقدّم الخدمة أنّك حاولت تحديث البيانات بنفسك.

يمكن لتطبيق العميل طلب المحتوى المُعدَّل صراحةً من خلال استدعاء طريقة مختلفة تُعرف أيضًا باسم refresh(). عند الاتصال بهذا الاسم ، قم بتمرير عنوان URL للبيانات المراد تحديثها.

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

تحسينات على Job Scheduler

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

تتضمّن التعديلات التي تم إجراؤها على "JobScheduler" ما يلي:

  • يمكنك الآن ربط قائمة انتظار بالعمل بوظيفة مجدوَلة. لإضافة عنصر عمل إلى قائمة انتظار الوظيفة، أو الاتصال JobScheduler.enqueue() عندما تكون المهمة قيد التشغيل، يمكنها إزالة العمل في انتظار المراجعة من قائمة الانتظار ومعالجته. تتعامل هذه الوظيفة مع العديد من حالات الاستخدام التي كان من الممكن أن يكون لها دعت إلى بدء خدمة تعمل في الخلفية، وخاصة الخدمات التي تنفذ IntentService
  • توفّر Android Support Library 26.0.0 فئة JobIntentService جديدة توفّر وظائف مماثلة لوظائف IntentService، ولكنها تستخدِم مهام بدلاً من خدمات عند التشغيل على الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) أو إصدار أحدث.
  • يمكنك الآن الاتصال JobInfo.Builder.setClipData() لربط ClipData بوظيفة ما. يتيح لك هذا الخيار ربط أذونات عناوين URI بوظيفتك، تمامًا مثل الطريقة التي يمكن بها نشر هذه الأذونات إلى Context.startService(). يمكنك أيضًا استخدام أذونات عنوان URI مع النية في قوائم العمل.
  • تتيح المهام المجدولة الآن العديد من القيود الجديدة:
    JobInfo.isRequireStorageNotLow()
    لن يتم تنفيذ المهمة إذا كانت مساحة التخزين المتاحة على الجهاز منخفضة.
    JobInfo.isRequireBatteryNotLow()
    لن يتم تنفيذ المهمة إذا كان مستوى البطارية عند درجة الحرارة الحرجة أو أقل منها. حدّ معيّن هذا هو المستوى الذي يعرض عنده الجهاز انخفاض مستوى شحن البطارية تحذير.
    NETWORK_TYPE_METERED
    تتطلّب الوظيفة اتصالاً بالشبكة يكون مُحصَّلًا، مثل معظم خطط بيانات شبكة الجوّال.

مستودع البيانات المخصّصة

يتيح لك الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) توفير مخزن بيانات مخصّص لتفضيلاتك، ما يمكن يكون مفيدًا إذا كان التطبيق يخزّن التفضيلات في سحابة إلكترونية أو قاعدة بيانات محلية، إذا كانت التفضيلات خاصة بالجهاز. لمزيد من المعلومات عن تنفيذ مستودع البيانات، يُرجى الرجوع إلى مستودع البيانات المخصّص.

تحسينات الوسائط

أداة تغيير مستوى الصوت

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

تحسينات التركيز على الصوت

تشارك تطبيقات الصوت إخراج الصوت على الجهاز من خلال طلب تركيز الصوت والتخلي عنه. يعالج التطبيق التغييرات في التركيز من خلال بدء التشغيل أو إيقافه أو خفض مستوى الصوت. هناك فئة AudioFocusRequest جديدة. ويمكن أن يؤدي استخدام هذه الفئة كمعلمة requestAudioFocus(), تتضمّن التطبيقات قدرات جديدة عند التعامل مع التغييرات في تركيز الصوت: التحايل التلقائي زيادة التركيز المتأخرة

مقاييس الوسائط

تؤدي طريقة getMetrics() الجديدة إلى إرجاع PersistableBundle. كائن يحتوي على الإعدادات ومعلومات الأداء، ويتم التعبير عنها في شكل خريطة للسمات والقيم. تمّ تحديد طريقة getMetrics() لفئات الوسائط التالية:

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

مشغّل الوسائط

بدءًا من نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكن تشغيل MediaPlayer. محتوى محمي بموجب إدارة الحقوق الرقمية والوسائط المشفرة على مستوى العينة HLS.

يقدّم Android 8.0 ميزة تحميل زائد جديدة seekTo() التي توفّر تفاصيل دقيقة التحكم عند التقديم إلى إطار. وهو يتضمن معلمة ثانية تحدد وضع البحث:

  • تنقل SEEK_PREVIOUS_SYNC موضع الوسائط إلى إطار مزامنة (أو مفتاح) مرتبط بمصدر بيانات يقع قبل الوقت المحدّد مباشرةً أو في هذا الوقت.
  • تنقل SEEK_NEXT_SYNC موضع الوسائط إلى إطار مزامنة (أو مفتاح) مرتبط بمصدر بيانات يقع بعد الوقت المحدّد مباشرةً أو في ذلك الوقت.
  • يعمل SEEK_CLOSEST_SYNC على نقل موضع الوسائط إلى إطار مزامنة (أو مفتاح). المرتبط بمصدر بيانات أقرب إلى وقت معين أو في وقت معين.
  • تنقل SEEK_CLOSEST موضع الوسائط إلى إطار (ليس بالضرورة إطار مزامنة أو إطار رئيسي) مرتبط بمصدر بيانات يقع بالقرب من الإطار الزمني المحدّد أو في الإطار الزمني المحدّد.

عند التقديم أو الإيقاف بشكل مستمر، يجب أن تستخدم التطبيقات أيًا من أوضاع SEEK_ بدلاً من SEEK_CLOSEST، الذي يعمل بشكل أبطأ نسبيًا ولكن يمكن أن يكون أكثر دقة.

MediaRecorder

  • يدعم MediaRecorder الآن تنسيق MPEG2_TS وهو البث:

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)

    Java

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);

    عرض MediaRecorder.OutputFormat

  • MediaMuxer يمكنه الآن معالجة أي عدد من عمليات بث الصوت والفيديو. لم تعُد الميزات محدودة إلى مقطع صوتي واحد و/أو مقطع فيديو واحد استخدِم addTrack() لدمج أي عدد تريده من الأغاني.
  • يمكن أيضًا أن يضيف MediaMuxer مقطعًا واحدًا أو أكثر من مقاطع البيانات الوصفية التي تحتوي على معلومات محدّدة من قِبل المستخدم لكلّ إطار. ويحدّد التطبيق تنسيق البيانات الوصفية. لا تتوفّر ميزة تتبُّع البيانات الوصفية إلا لحاويات MP4.

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

عند إضافة مقطع بيانات وصفية، يجب أن يبدأ تنسيق mime للمقطع بالبادئة "application/". كتابة بيانات التعريف هي نفسها كتابة بيانات الفيديو/الصوت باستثناء أن البيانات لا تأتي من MediaCodec. بدلاً من ذلك، يجتاز التطبيق ByteBuffer مرتبط بطابع زمني طريقة writeSampleData(). يجب أن يكون الطابع الزمني في القاعدة الزمنية نفسها التي يتضمّنها الفيديو والمقاطع الصوتية.

يستخدم ملف MP4 الذي تم إنشاؤه العنصر TextMetaDataSampleEntry المحدّد في القسم 12.3.3.2 من معيار ISOBMFF للإشارة إلى تنسيق mime للبيانات الوصفية. عند استخدام MediaExtractor لاستخراج الملف الذي يتضمّن مسار البيانات الوصفية، سيتم استخراج تنسيق mime للبيانات الوصفية إلى MediaFormat.

تحسين إمكانية الوصول إلى ملفات الوسائط

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

ومع ذلك، يتسبب الوصول إلى ملفات الوسائط الكبيرة من مصدر بيانات بعيد في بعض الصعوبات:

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

يعالج نظام التشغيل Android 8.0 كلًّا من هذه التحديات من خلال تحسين "إطار عمل الوصول إلى مساحة التخزين".

موفّرو المستندات المخصَّصة

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

لاستخدام هذه الميزة، عليك طلب الرقم الجديد من طريقة StorageManager.openProxyFileDescriptor(). تقبل الطريقة openProxyFileDescriptor() عنصر ProxyFileDescriptorCallback كوسيطة ردّ اتصال. تستدعي SAF دالة الاستدعاء في أي وقت يُجري فيه تطبيق العميل عمليات على الملفات في وصف الملف الذي تم إرجاعه من مقدّم المستندات.

الوصول المباشر إلى المستندات

اعتبارًا من Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك استخدام الإجراء getDocumentUri() للحصول على عنوان URL يشير إلى المستند نفسه المشار إليه في mediaUri المحدَّد. ومع ذلك، بما أنّ معرّف الموارد المنتظِم الذي تم إرجاعه مدعومًا بملف DocumentsProvider، يمكن لمدراء مجموعات الوسائط الوصول إلى المستند مباشرةً، بدون الحاجة إلى التنقّل في أشجار الأدلة ذات النطاق المحدّد. ونتيجةً لذلك، يمكن لمديري الوسائط إجراء عمليات الملفات على المستند بسرعة أكبر بكثير.

تنبيه: تحدد الطريقة getDocumentUri() موقع ملفات الوسائط فقط. لا يمنح ذلك التطبيقات إذن للوصول إلى هذه الملفات. مزيد من المعلومات حول كيفية الحصول على إذن بالوصول إلى البيانات إذن بالوصول إلى ملفات الوسائط، راجِع المستندات المرجعية.

المسارات إلى المستندات

عند استخدام إطار عمل الوصول إلى مساحة التخزين في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك استخدام الأسلوب findDocumentPath()، المتاح في كل من فئتَي DocumentsContract و DocumentsProvider ، لتحديد المسار من جذر نظام ملفات معيّن استنادًا إلى ملف العميل ID. وتُعيد الطريقة هذا المسار في عنصر DocumentsContract.Path. في الحالات التي يتضمّن فيها نظام الملفات مسارات متعددة محدّدة للمستند نفسه، تُرجع الطريقة المسار الذي يتم استخدامه غالبًا للوصول إلى المستند الذي يحمل رقم التعريف المحدّد.

تكون هذه الوظيفة مفيدة بشكل خاص في السيناريوهات التالية:

  • يستخدم تطبيقك الخيار "حفظ باسم" الذي يعرض موقع وثيقة معينة.
  • يعرض تطبيقك المجلدات في طريقة عرض نتائج البحث ويجب تحميل صفحة الطفل المستندات الموجودة داخل مجلد معين إذا اختار المستخدم المجلد.

ملاحظة: إذا كان تطبيقك لديه إذن بالوصول إلى بعض المستندات فقط في المسار، لا تتضمّن القيمة المعروضة للدالة findDocumentPath() سوى المجلدات والمستندات التي يمكن لتطبيقك الوصول إليها.

مراقبة تشغيل الصوت

تحافظ خدمة النظام AudioManager على قائمة بعناصر AudioPlaybackConfiguration النشطة، التي يحتوي كلّ منها على معلومات عن جلسة تشغيل صوتية معيّنة. يمكن لتطبيقك لاسترداد مجموعة الإعدادات النشطة حاليًا من خلال استدعاء getActivePlaybackConfigurations()

بدءًا من الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك تسجيل معاودة اتصال يتم إبلاغك بها. تطبيقك عند استخدام عبارة واحدة أو أكثر تم تغيير AudioPlaybackConfiguration عنصرًا. لإجراء ذلك، طلب registerAudioPlaybackCallback()، ويمر في مثيل AudioManager.AudioPlaybackCallback تشير رسالة الأشكال البيانية تحتوي فئة واحدة (AudioManager.AudioPlaybackCallback) على onPlaybackConfigChanged()، التي يستدعيها النظام عند تشغيل الصوت تغييرات على إعدادات التشغيل.

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

Wi-Fi Aware

نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) مع دعم خدمة Wi-Fi Aware التي تستند إلى ميزة المجاورة مواصفات شبكات الوعي (NAN) على الأجهزة التي تتضمّن الأجهزة المناسبة لميزة "الاستشعار عبر Wi-Fi"، يمكن للتطبيقات والأجهزة المجاورة رصد بعضها ونقلها عبر شبكة Wi-Fi بدون نقطة وصول إلى الإنترنت. نحن نعمل باستخدام أجهزتنا الشركاء لتوفير تقنية Wi-Fi Aware للأجهزة في أقرب وقت ممكن. بالنسبة للحصول على معلومات عن طريقة دمج خدمة Wi-Fi Aware في تطبيقك، يُرجى الاطّلاع على المقالة Wi-Fi Aware.

البلوتوث

يثري Android 8.0 (مستوى واجهة برمجة التطبيقات 26) دعم البلوتوث للنظام الأساسي من خلال إضافة ما يلي: الجديدة:

  • التوافق مع معيار AVRCP 1.4 الذي يتيح تصفُّح مكتبة الأغاني
  • إتاحة معيار البلوتوث منخفض الطاقة (BLE) 5.0
  • دمج برنامج ترميز LDAC من Sony في حِزمة البلوتوث

إقران الجهاز المصاحب

يوفر Android 8.0 (مستوى واجهة برمجة التطبيقات 26) واجهات برمجة تطبيقات تتيح لك تخصيص مربّع حوار طلب الإقران عند محاولة الإقران مع الأجهزة المصاحبة بلوتوث وBLE وWi-Fi لمزيد من المعلومات، يُرجى مراجعة جهاز مصاحب الإقران.

لمزيد من المعلومات حول استخدام البلوتوث على Android، راجِع دليل البلوتوث. للاطّلاع على التغييرات في البلوتوث الخاصة بنظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، اطّلِع على قسم البلوتوث في صفحة التغييرات في سلوك Android 8.0.

المشاركة

المشاركة الذكية

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

تعمل ميزة "المشارَكة الذكية" مع أنواع المحتوى الأخرى غير image، مثل audio وvideo وtext وURL وغيرها.

لتفعيل ميزة "المشاركة الذكية"، يمكنك إضافة ArrayList من 3 إشعارات كحد أقصى. سلسلة تعليقات توضيحية للغرض الذي يشارك المحتوى. يجب أن تصف التعليقات التوضيحية المكوّنات أو المواضيع الرئيسية في المحتوى. يوضّح مثال الرمز البرمجي التالي كيفية إضافة تعليقات توضيحية إلى الطلب:

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

Java

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

للحصول على معلومات تفصيلية حول التعليقات التوضيحية للمشاركة الذكية، يُرجى الاطّلاع على EXTRA_CONTENT_ANNOTATIONS

أداة تصنيف النص

على الأجهزة المتوافقة، يمكن للتطبيقات استخدام "تصنيف النصوص" الجديد للتحقّق مما إذا كانت السلسلة تتطابق مع نوع عنصر مصنّف معروف والحصول على بدائل مقترَحة للاختيار. تشمل الكيانات التي يتعرف عليها النظام العناوين، وعناوين URL، وأرقام الهواتف وعناوين البريد الإلكتروني. لمزيد من المعلومات، يُرجى مراجعة TextClassifier

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

يتيح نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) العديد من ميزات تسهيل الاستخدام الجديدة لصنّاع التطبيقات الذين ينشئون خدمات تسهيل الاستخدام الخاصة بهم:

لمعرفة المزيد من المعلومات عن كيفية تسهيل الوصول إلى تطبيقك، راجِع تسهيل الاستخدام.

الأمان والخصوصية

الأذونات

يقدّم نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) العديد من الأذونات الجديدة المرتبطة بالاتصالات الهاتفية:

  • يسمح الإذن ANSWER_PHONE_CALLS لتطبيقك بالرد على المكالمات الهاتفية الواردة آليًا. لمعالجة مكالمة هاتفية واردة في تطبيقك، يمكنك استخدام الأسلوب acceptRingingCall() .
  • صفحة إنّ إذن "READ_PHONE_NUMBERS" يمنح تطبيقك إذنًا بالقراءة. أرقام الهواتف المخزّنة في الجهاز.

كلا هذين الإذنَين مصنَّفان على أنّهما خطيرَان وهما جزء من مجموعة الأذونات PHONE .

واجهات برمجة تطبيقات جديدة للوصول إلى الحساب وعرض الإعلانات

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

في الإصدارات السابقة من Android، كان على التطبيقات التي تريد تتبُّع قائمة حسابات المستخدمين الحصول على إشعارات بشأن جميع الحسابات، بما في ذلك الحسابات التي تنتمي إلى أنواع غير ذات صلة. يضيف نظام التشغيل Android 8.0 الطريقة addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) التي تتيح للتطبيقات تحديد قائمة بأنواع الحسابات التي يجب تلقّي تغييرات الحساب لها.

التغييرات في واجهة برمجة التطبيقات

يوفّر AccountManager ست طرق جديدة لمساعدة مصادقة التطبيقات في إدارة التطبيقات التي يمكنها الاطّلاع على حساب:

يقدّم نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) قيمتَين خاصتَين لاسم الحزمة لتحديد مستويات الظهور للتطبيقات التي لم يتم ضبطها باستخدام الطريقة setAccountVisibility(android.accounts.Account, java.lang.String, int) . يتم تطبيق قيمة PACKAGE_NAME_KEY_LEGACY_VISIBLE مستوى العرض على التطبيقات التي تمتلك إذن GET_ACCOUNTS ، وتستهدف إصدارات Android أقدم من Android 8.0، أو التي تتوافق توقيعاتها مع معرّف الهوية الذي يستهدف أي إصدار من Android. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE توفّر قيمة تلقائية لإمكانية الرؤية للتطبيقات التي لم يتم ضبطها سابقًا والتي PACKAGE_NAME_KEY_LEGACY_VISIBLE ليس لها تطبيق.

لمزيد من المعلومات حول واجهات برمجة تطبيقات الوصول الجديدة إلى الحساب واكتشافه، يُرجى الاطّلاع على مرجع لـ AccountManager و OnAccountsUpdateListener

الاختبار

اختبار قياس حالة التطبيق

يوفر الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) العناصر التالية من الدعم الإضافي لواجهة برمجة التطبيقات اختبارات قياس حالة التطبيق.

تنفيذ عمليات التطبيق غير التلقائية

يمكنك الآن تحديد ضرورة إجراء اختبار أداة معين مقابل عملية خارج العملية الافتراضية لتطبيقك. يكون هذا الإعداد مفيدًا إذا كان تطبيقك يحتوي على أنشطة متعددة يتم تشغيلها في عمليات مختلفة.

لتحديد عملية القياس غير التلقائية، انتقِل إلىملف البيان، ثم إلى عنصر <instrumentation> المطلوب. إضافة android:targetProcess، وضبط قيمته على إحدى ما يلي:

  • اسم عملية معيّنة
  • قائمة بأسماء العمليات مفصولة بفواصل.
  • حرف بدل ("*")، يسمح بتشغيل الأداة مقابل أي عملية تم إطلاقها تنفّذ التعليمات البرمجية في الحزمة المحددة في السمة android:targetPackage.

أثناء تنفيذ اختبار قياس حالة التطبيق، يمكنك التحقّق من العملية. يتم اختباره من خلال طلب الرقم getProcessName().

الإبلاغ عن النتائج أثناء الاختبار

يمكنك الآن الإبلاغ عن النتائج أثناء تنفيذ اختبار الأدوات، بدلاً من بعد ذلك، من خلال طلب الرقم addResults().

النية الزائفة للاختبارات

لتسهيل إنشاء اختبارات منفصلة ومستقلة لواجهة المستخدم في تطبيقك Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) يقدم طريقة onStartActivity(). يمكنك إلغاء هذه الطريقة في فئة فرعية مخصصة من فئة واحدة (Instrumentation.ActivityMonitor) للتعامل مع فئة معيّنة نية أن يستدعي صف الاختبار الخاص بك.

عندما تستدعي فئة الاختبار النية، تُرجع الطريقة عنصرًا رمزيًا Instrumentation.ActivityResult بدلاً من تنفيذ النية نفسها. باستخدام منطق النية الوهمية هذا في اختباراتك، يمكنك التركيز على كيفية إعداد نشاطك للنية التي ترسلها إلى نشاط مختلف أو إلى تطبيق مختلف تمامًا ومعالجتها.

وقت التشغيل والأدوات

تحسينات النظام الأساسي

يقدّم نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) تحسينات على وقت التشغيل وتحسينات أخرى للنظام الأساسي تؤدي بدورها إلى تحسين الأداء. وتشمل هذه التحسينات جمع المهملات المتزامنة، واستخدام الذاكرة بكفاءة أكبر، وتحسين أداء الرموز البرمجية.

وتؤدي هذه التحسينات إلى تقليل أوقات بدء التشغيل، فضلاً عن تحسين أداء كلٍّ من نظام التشغيل والتطبيقات.

إتاحة لغة Java المحدّثة

يدعم الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) العديد من واجهات برمجة تطبيقات OpenJDK Java الإضافية:

لمعرفة المزيد حول الفئات والطرق ضمن هذه الأماكن الحزم، اطلع على الوثائق المرجعية لواجهة برمجة التطبيقات.

إذا كنت تريد استخدام ميزات لغة Java 8 في "استوديو Android"، عليك تنزيل أحدث إصدار من الإصدار التجريبي.

واجهات برمجة تطبيقات ICU4J Framework لنظام التشغيل Android التي تم تعديلها

يوسّع Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) إطار عمل "ICU4J" لنظام التشغيل Android واجهات برمجة التطبيقات (APIs)، وهي مجموعة فرعية من واجهات برمجة تطبيقات ICU4J، لتمكين مطوّري التطبيقات من استخدامها ضمن حزمة android.icu. تستخدِم واجهات برمجة التطبيقات هذه بيانات الترجمة والشرح المتوفّرة على الجهاز، ما يتيح لك تقليل مساحة تخزين ملف APK من خلال عدم تجميع مكتبات IDE4J في ملف APK.

الجدول 1. إصدارات ICU وCLDR وUnicode المستخدَمة في Android

مستوى واجهة برمجة تطبيقات Android إصدار وحدة العناية المركزة إصدار CLDR إصدار يونيكود
الإصدار 7.0 من Android (المستوى 24 لواجهة برمجة التطبيقات) والإصدار 7.1 من Android (المستوى 25 لواجهة برمجة التطبيقات) 56 28 من نظام التشغيل Android
‫Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) 58.2 30.0.3 9.0

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

Android Enterprise

تمّت إضافة ميزات لواجهات برمجة التطبيقات وميزات جديدة للمؤسسات على الأجهزة التي تعمل بالإصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات). تشمل أبرز النقاط ما يلي:

  • تتيح الملفات الشخصية للعمل على الأجهزة المُدارة بالكامل للمؤسسات فصل العمل عن بياناتك الشخصية، أثناء إدارة كليهما.
  • تسمح عملية تفويض واجهة برمجة التطبيقات لمالكي الأجهزة ومالكي الملفات الشخصية بتعيين إدارة التطبيقات إلى تطبيقات أخرى.
  • إنّ تحسينات تجربة المستخدم في مسار التوفير (بما في ذلك خيارات التخصيص الجديدة) تقلّل من وقت الإعداد.
  • تتيح عناصر التحكّم الجديدة في البلوتوث وWi-Fi والاحتفاظ بنسخة احتياطية من البيانات والأمان للمؤسسات إدارة المزيد من وظائف الجهاز. يساعد تسجيل نشاط الشبكة الأنشطة التجارية في تتبُّع المشاكل.

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