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

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

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

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

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

ميزة "نافذة ضمن النافذة" في الإصدار 8.0 من نظام Android.

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

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

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

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

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

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

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

  • Activity.setPictureInPictureParams(): يعدِّل هذا الإعداد إعدادات ضبط نافذة ضمن النافذة (PIP) لأحد الأنشطة. إذا كان النشاط في وضع نافذة ضمن النافذة (PIP) حاليًا، يتم تعديل الإعدادات. يكون ذلك مفيدًا إذا تغير نسبة العرض إلى الارتفاع الخاصة بالنشاط. إذا لم يكن النشاط في وضع PIP، استخدام إعدادات الضبط هذه بغض النظر عن طريقة 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.

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

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

تغيير حجم النص تلقائيًا

يتيح لك الإصدار 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 التي تعرض محتوى الويب في تطبيقك تعمل واجهات برمجة التطبيقات هذه التي تعمل على تحسين ثبات تطبيقك وأمانه على ما يلي: التالي:

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

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

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

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

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

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

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

يتم في Android 8.0 (المستوى 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 من واجهة برمجة التطبيقات) تحديد المواقف التي يكون فيها إصدار Android عكس ذلك. لعنصر 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

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

مجموعة الصور المتحركة

بدءًا من الإصدار Android 8.0 (المستوى 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 الذي يجب يتم التركيز عليها بعد استئناف نشاط (إعادة إنشاؤه) وضغط المستخدم على مفتاح التنقل بلوحة المفاتيح، مثل مفتاح التبويب (Tab). لتطبيق خيار "التركيز التلقائي" الإعداد، اضبط قيمة العنصر View android:focusedByDefault إلى true في تنسيق XML الذي يحتوي على عنصر واجهة المستخدم، أو تم تمريره في true إلى setFocusedByDefault() في ومنطق واجهة المستخدم للتطبيق.

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

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

لاستخدام تحسينات محرك تحويل النص إلى كلام في التطبيق، يجب تسجيل مثيل لـ UtteranceProgressListener. وكجزء من قم بتضمين معالج onRangeStart() .

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

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

النظام

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

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

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

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

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

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

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

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

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

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

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

للحصول على معلومات تفصيلية حول التغييرات التي طرأت على موفّري المحتوى، يمكنك الاطّلاع على ContentProvider و ContentProviderClient

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

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

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

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

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

تحسينات في أداة Job Scheduler

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

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

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

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

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

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

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

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

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

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

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

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

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

التعرُّف على شبكة Wi-Fi

نظام التشغيل 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 الذي يتيح تصفُّح مكتبة الأغاني
  • يتوافق مع معيار Bluetooth Low-Energy (BLE) 5.0.
  • دمج برنامج ترميز Sony LDAC في حزمة البلوتوث

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

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

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

المشاركة

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

يتعرّف 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 من واجهة برمجة التطبيقات) العديد من الأذونات الجديدة المتعلقة بالاتصالات الهاتفية:

تم تصنيف هذين الإذنين على أنهما خطيرًا وكلاهما جزء من 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 أقدم من 8.0 Android، أو تطابق التوقيعات مع برنامج المصادقة الذي يستهدف أي إصدار من إصدارات 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 لنظام Android

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

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

مستوى واجهة برمجة تطبيقات Android إصدار وحدة العناية المركّزة (ICU) نسخة CLDR إصدار Unicode
Android 7.0 (المستوى 24) وAndroid 7.1 (المستوى 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.