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

مستوى واجهة برمجة التطبيقات: 21

يقدّم Android 5.0 (LOLLIPOP) ميزات جديدة للمستخدمين ومطوّري التطبيقات. ويقدّم هذا المستند مقدمة حول أبرز واجهات برمجة التطبيقات الجديدة.

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

لإلقاء نظرة عالية المستوى على ميزات النظام الأساسي الجديدة، يمكنك بدلاً من ذلك الاطّلاع على أهم ميزات Android Lollipop.

بدء التطوير

لبدء إنشاء تطبيقات لنظام التشغيل Android 5.0، ينبغي لك أولاً الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android. بعد ذلك، استخدِم أداة إدارة حزمة تطوير البرامج (SDK) لتنزيل منصة حزمة تطوير البرامج (SDK) لنظام التشغيل Android 5.0 وصور النظام.

تعديل مستوى واجهة برمجة التطبيقات المستهدَف

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

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

لمزيد من المعلومات حول طريقة عمل مستويات واجهة برمجة التطبيقات، يمكنك الاطّلاع على المقالة ما هو مستوى واجهة برمجة التطبيقات؟

تغييرات مهمة في السلوك

إذا سبق لك نشر تطبيق لنظام التشغيل Android، يُرجى العلم بأنّ تطبيقك قد يتأثّر بالتغييرات في الإصدار 5.0 من نظام التشغيل Android.

للحصول على المعلومات الكاملة، يُرجى الاطّلاع على التغييرات في الإصدار 5.0 من نظام التشغيل Android.

واجهة المستخدم

دعم التصميم المتعدد الأبعاد

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

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

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

المستندات والأنشطة المتزامنة في شاشة العناصر الأخيرة

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

لإدراج فاصل منطقي لكي يتعامل النظام مع نشاطك كمهمة جديدة، استخدِم FLAG_ACTIVITY_NEW_DOCUMENT عند بدء النشاط باستخدام startActivity(). ويمكنك أيضًا التعرّف على هذا السلوك من خلال ضبط السمة documentLaunchMode للعنصر <activity> على "intoExisting" أو "always" في البيان.

لتجنب ازدحام شاشة الأجهزة الأخيرة، يمكنك تعيين الحد الأقصى لعدد المهام التي يمكن أن تظهر في تلك الشاشة من تطبيقك. لإجراء ذلك، اضبط السمة <اسم> android:maxRecents. ويبلغ الحد الأقصى الحالي الذي يمكن تحديده 50 مهمة لكل مستخدم (25 مهمة للأجهزة ذات ذاكرة الوصول العشوائي المنخفضة).

يمكن ضبط المهام في شاشة الأجهزة الأخيرة بحيث تستمر في جميع عمليات إعادة التشغيل. للتحكم في سلوك الثبات، استخدِم السمة android:persistableMode. يمكنك أيضًا تغيير الخصائص المرئية لأحد الأنشطة في الشاشة الأخيرة، مثل لون النشاط وتصنيفه ورمزه، من خلال استدعاء طريقة setTaskDescription().

آخر الأخبار حول WebView

يحدِّث Android 5.0 تنفيذ WebView إلى Chromium M37، ما يوفّر تحسينات في الأمان والثبات، بالإضافة إلى إصلاحات للأخطاء. تم تعديل سلسلة وكيل المستخدم التلقائية لـ WebView التي تعمل على نظام التشغيل Android 5.0 لدمج رقم الإصدار 37.0.0.0.

يقدم هذا الإصدار فئة PermissionRequest التي تسمح لتطبيقك بمنح WebView إذن الوصول إلى الموارد المحمية مثل الكاميرا والميكروفون، من خلال واجهات برمجة تطبيقات الويب مثل getUserMedia(). يجب أن يحصل تطبيقك على أذونات Android المناسبة لهذه الموارد لمنح الأذونات لـ WebView.

باستخدام طريقة onShowFileChooser() الجديدة، يمكنك الآن استخدام حقل نموذج إدخال في WebView وتشغيل أداة اختيار الملفات لاختيار الصور والملفات من جهاز Android.

بالإضافة إلى ذلك، يتوافق هذا الإصدار مع المعايير المفتوحة WebVideo وWebGL وWebRTC. لمعرفة المزيد من المعلومات عن الميزات الجديدة التي يتضمّنها هذا الإصدار، يمكنك الاطّلاع على WebView لنظام التشغيل Android.

تصوير الشاشة ومشاركتها

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

تتيح طريقة createVirtualDisplay() الجديدة لتطبيقك التقاط محتوى الشاشة الرئيسية (الشاشة التلقائية) في عنصر Surface يمكن لتطبيقك بعد ذلك إرساله على الشبكة. تسمح واجهة برمجة التطبيقات بالتقاط محتوى غير آمن للشاشة، وليس صوت النظام. لبدء التقاط الشاشة، يجب أن يطلب تطبيقك أولاً إذن المستخدم من خلال فتح مربّع حوار تصوير الشاشة باستخدام Intent الذي يتم الحصول عليه من خلال الطريقة createScreenCaptureIntent().

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

الإشعارات

إشعارات شاشة القفل

تتمتع شاشات القفل في Android 5.0 بالقدرة على تقديم الإشعارات. يمكن للمستخدمين عبر الإعدادات اختيار السماح بعرض محتوى الإشعارات الحساسة على شاشة قفل آمنة.

يمكن لتطبيقك التحكّم في مستوى التفاصيل المرئية عند عرض إشعاراته فوق شاشة القفل الآمنة. للتحكم في مستوى الرؤية، اطلب الرمز setVisibility() وحدِّد إحدى القيم التالية:

  • VISIBILITY_PRIVATE: يعرض هذا الخيار المعلومات الأساسية، مثل رمز الإشعار، مع إخفاء المحتوى الكامل للإشعار.
  • VISIBILITY_PUBLIC: يعرض هذا الخيار المحتوى الكامل للإشعار.
  • VISIBILITY_SECRET: لا تعرض أي بيانات، باستثناء رمز الإشعار.

عندما يكون مستوى إذن الوصول هو VISIBILITY_PRIVATE، يمكنك أيضًا تقديم نسخة مخفيّة من محتوى الإشعار لإخفاء التفاصيل الشخصية. فمثلاً، قد يعرض تطبيق الرسائل القصيرة SMS إشعارًا يوضح "لديك 3 رسائل نصية جديدة" ولكنه يخفي محتوى الرسالة ومرسليها. لتقديم هذا الإشعار البديل، عليك أولاً إنشاء إشعار الاستبدال باستخدام Notification.Builder. عند إنشاء عنصر الإشعار الخاص، أرفِق الإشعار البديل من خلال طريقة setPublicVersion().

البيانات الوصفية للإشعارات

يستخدم Android 5.0 البيانات الوصفية المرتبطة بإشعارات التطبيق لترتيب الإشعارات بفعالية أكبر. لضبط البيانات الوصفية، يمكنك استدعاء الطرق التالية في Notification.Builder عند إنشاء الإشعار:

  • setCategory(): لإخبار النظام بكيفية التعامل مع إشعارات تطبيقك عندما يكون الجهاز في وضع الأولوية (على سبيل المثال، إذا كان الإشعار يمثّل مكالمة واردة أو رسالة فورية أو تنبيهًا).
  • setPriority(): وضع علامة على الإشعار بأنّه أكثر أو أقل أهمية من الإشعارات العادية تظهر الإشعارات التي تم ضبط حقل الأولوية على PRIORITY_MAX أو PRIORITY_HIGH في نافذة عائمة صغيرة إذا كان الإشعار يتضمّن صوتًا أو اهتزازًا أيضًا.
  • addPerson(): تتيح لك إضافة مستخدم واحد أو أكثر ملائم للإشعارات. يمكن لتطبيقك استخدام هذه الطريقة للإشارة إلى النظام بأنه يجب أن يجمع الإشعارات من الأشخاص المحدّدين معًا أو يرتب الإشعارات الواردة من هؤلاء المستخدمين حسب الأهمية.

الرسومات

التوافق مع OpenGL ES 3.1

يضيف نظام التشغيل Android 5.0 واجهات Java ويتوافق في الأصل مع OpenGL ES 3.1. تشمل الوظائف الأساسية الجديدة المتوفرة في OpenGL ES 3.1 ما يلي:

  • أدوات تظليل العمليات
  • عناصر أداة التظليل المنفصلة
  • أوامر الرسم غير المباشر
  • زخارف متعددة النماذج والاستنسل
  • تحسينات لغة التظليل
  • إضافات لأوضاع الدمج المتقدّمة وتصحيح الأخطاء
  • التوافق مع الأنظمة القديمة مع OpenGL ES 2.0 و3.0

يتم توفير واجهة Java لبرنامج OpenGL ES 3.1 على نظام التشغيل Android مع GLES31. عند استخدام OpenGL ES 3.1، احرص على ذكره في ملف البيان باستخدام العلامة <uses-feature> والسمة android:glEsVersion. مثلاً:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

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

حزمة إضافات Android

بالإضافة إلى OpenGL ES 3.1، يوفّر هذا الإصدار حزمة إضافة مع واجهات Java ودعمًا أصليًا لوظائف الرسومات المتقدّمة. يتعامل Android مع هذه الإضافات باعتبارها حزمة واحدة. (في حال توفّر إضافة ANDROID_extension_pack_es31a، يمكن لتطبيقك افتراض توفّر جميع الإضافات في الحزمة وتفعيل ميزات لغة التظليل باستخدام عبارة #extension واحدة).

تتوافق حزمة الإضافات مع ما يلي:

  • إتاحة أداة تظليل الأجزاء المضمونة للمخازن المؤقتة لتخزين أدوات التظليل والصور والبيانات (ميزة تظليل الأجزاء اختيارية في OpenGL ES 3.1).
  • عناصر التلعيب والأشكال الهندسية
  • تنسيق ضغط البنية ASTC (LDR)
  • الاستيفاء والتظليل لكل عينة
  • أوضاع مزج مختلفة لكل مرفق لون في المخزن المؤقت للإطار

يتم توفير واجهة Java لحزمة الإضافة مع GLES31Ext. وفي بيان التطبيق، يمكنك أن تشير إلى أنّه يجب تثبيت تطبيقك على الأجهزة التي تتوافق مع حزمة الإضافات فقط. مثلاً:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

الوسائط

واجهة برمجة تطبيقات الكاميرا لإمكانيات الكاميرا المتقدّمة

يقدّم نظام التشغيل Android 5.0 واجهة برمجة التطبيقات android.hardware.camera2 الجديدة لتسهيل التقاط الصور بدقة ومعالجة الصور. يمكنك الآن البرمجة الوصول إلى أجهزة الكاميرا المتوفرة للنظام من خلال getCameraIdList() وربطها بجهاز معيّن باستخدام "openCamera()". لبدء التقاط الصور، أنشِئ CameraCaptureSession وحدِّد كائنات Surface لإرسال الصور التي تم التقاطها. يمكن ضبط CameraCaptureSession لأخذ لقطات واحدة أو عدة صور في صور متسلسلة.

ليتم إشعارك عند التقاط صور جديدة، نفِّذ ميزة أداة معالجة الصوت في CameraCaptureSession.CaptureCallback وضبطها في طلب الالتقاط. عندما يكمل النظام طلب التقاط الصورة، يتلقّى مستمع "CameraCaptureSession.CaptureCallback" مكالمة إلى onCaptureCompleted()، يقدّم لك البيانات الوصفية لالتقاط الصورة في CaptureResult.

تتيح الفئة CameraCharacteristics لتطبيقك رصد ميزات الكاميرا المتوفّرة على الجهاز. وتمثِّل السمة INFO_SUPPORTED_HARDWARE_LEVEL في العنصر مستوى وظائف الكاميرا.

  • تتوافق جميع الأجهزة على الأقل مع مستوى أجهزة INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY الذي يتضمّن إمكانات تعادل تقريبًا إمكانات واجهة برمجة التطبيقات Camera المتوقّفة نهائيًا.
  • يمكن للأجهزة المتوافقة مع مستوى أجهزة INFO_SUPPORTED_HARDWARE_LEVEL_FULL التحكّم اليدوي في الالتقاط ومعالجة ما بعد المعالجة والتقاط صور عالية الدقة بعدد لقطات مرتفع في الثانية.

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

تشغيل الصوت

يتضمّن هذا الإصدار التغييرات التالية التي سيتم إجراؤها على AudioTrack:

  • يمكن لتطبيقك الآن توفير بيانات صوتية بتنسيق النقطة العائمة (ENCODING_PCM_FLOAT). يسمح ذلك بنطاق ديناميكي أعلى ودقة أكثر اتساقًا وهامشًا أكبر. حساب النقاط العائمة مفيد بشكل خاص أثناء العمليات الحسابية المتوسطة. تستخدم نقاط نهاية التشغيل تنسيق عدد صحيح للبيانات الصوتية وبعمق بت أقل. (في Android 5.0، لم تصل بعض الأجزاء من مسار المعالجة الداخلية إلى نقطة عائمة بعد).
  • يمكن لتطبيقك الآن توفير بيانات صوتية كـ ByteBuffer، بالتنسيق نفسه الوارد في MediaCodec.
  • يمكن أن يساعد خيار WRITE_NON_BLOCKING في تبسيط عملية التخزين المؤقت وإجراء سلاسل محادثات متعددة في بعض التطبيقات.

التحكّم في تشغيل الوسائط

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

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

يمكنك الآن إنشاء تطبيقك الخاص بوحدة التحكّم في الوسائط من خلال فئة MediaController الجديدة. توفّر هذه الفئة طريقة آمنة مع السلاسل لمراقبة تشغيل الوسائط والتحكّم فيها من خلال عملية واجهة المستخدم في التطبيق. عند إنشاء وحدة تحكُّم، حدِّد كائن MediaSession.Token حتى يتمكّن تطبيقك من التفاعل مع MediaSession المحدَّد. وباستخدام طرق MediaController.TransportControls، يمكنك إرسال أوامر مثل play() وstop() وskipToNext() وsetRating() للتحكّم في تشغيل الوسائط في هذه الجلسة. باستخدام وحدة التحكّم، يمكنك أيضًا تسجيل كائن MediaController.Callback للاستماع إلى بيانات البيانات الوصفية وتغييرات الحالة في الجلسة.

بالإضافة إلى ذلك، يمكنك إنشاء إشعارات غنية بصريًا تسمح بعنصر تحكم التشغيل مرتبط بجلسة وسائط مع الفئة Notification.MediaStyle الجديدة.

تصفُّح الوسائط

يتيح نظام التشغيل Android 5.0 إمكانية تصفُّح مكتبة محتوى الوسائط لتطبيق آخر من خلال واجهة برمجة التطبيقات الجديدة android.media.Browse. لعرض محتوى الوسائط في تطبيقك، عليك تمديد الفئة MediaBrowserService. يجب أن يوفّر تنفيذ MediaBrowserService إمكانية الوصول إلى MediaSession.Token حتى تتمكّن التطبيقات من تشغيل محتوى الوسائط المقدّم من خلال خدمتك.

للتفاعل مع إحدى خدمات متصفّحات الوسائط، يمكنك استخدام الفئة MediaBrowser. حدِّد اسم المكوِّن لـ MediaSession عند إنشاء مثيل MediaBrowser. وباستخدام مثيل المتصفّح هذا، يمكن لتطبيقك بعد ذلك الاتصال بالخدمة المرتبطة والحصول على عنصر MediaSession.Token لتشغيل المحتوى المعروض من خلال تلك الخدمة.

سعة التخزين

اختيار الدليل

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

لاختيار شجرة فرعية للدليل، أنشئ هدفًا OPEN_DOCUMENT_TREEوأرسِله. يعرض النظام جميع مثيلات DocumentsProvider التي تتيح اختيار الشجرة الفرعية، مع السماح للمستخدم بتصفُّح دليل واختياره. يمثل عنوان URI الذي تم عرضه الوصول إلى الشجرة الفرعية المحددة. يمكنك بعد ذلك استخدام buildChildDocumentsUriUsingTree() وbuildDocumentUriUsingTree() مع query() لاستكشاف الشجرة الفرعية.

تتيح لك طريقة createDocument() الجديدة إنشاء مستندات أو أدلة جديدة في أي مكان ضمن الشجرة الفرعية. لإدارة المستندات الحالية، استخدِم renameDocument() و deleteDocument(). يُرجى الانتقال إلى COLUMN_FLAGS للتأكّد من أنّ مقدّمي الخدمات متاحين لهذه المكالمات قبل إصدارها.

إذا كنت تنفّذ DocumentsProvider وتريد إتاحة اختيار الشجرة الفرعية، يمكنك تنفيذ isChildDocument() وتضمين FLAG_SUPPORTS_IS_CHILD في COLUMN_FLAGS.

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

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

عدة اتصالات شبكات

يوفّر Android 5.0 واجهات برمجة تطبيقات جديدة للشبكات المتعددة تسمح لتطبيقك بالبحث الديناميكي عن الشبكات المتاحة ذات الإمكانيات المحددة ثم إنشاء اتصال بها. تكون هذه الوظيفة مفيدة عندما يتطلب تطبيقك شبكة متخصّصة، مثل SUPL أو MMS أو شبكة فوترة مشغّل شبكة الجوّال، أو إذا كنت تريد إرسال البيانات باستخدام نوع معيّن من بروتوكولات النقل.

لاختيار شبكة ديناميكية والاتصال بها من تطبيقك، يُرجى اتّباع الخطوات التالية:

  1. أنشِئ ConnectivityManager.
  2. استخدِم الفئة NetworkRequest.Builder لإنشاء عنصر NetworkRequest وتحديد ميزات الشبكة ونوع النقل الذي يهتم به تطبيقك.
  3. للبحث عن شبكات مناسبة، يمكنك استدعاء requestNetwork() أو registerNetworkCallback()، وإدخال كائن NetworkRequest وتنفيذ ConnectivityManager.NetworkCallback. استخدِم طريقة requestNetwork() إذا أردت التبديل بشكل نشط إلى شبكة مناسبة بعد رصدها. ولتلقّي إشعارات الشبكات التي تم فحصها فقط بدون التبديل بشكل نشط، استخدِم طريقة registerNetworkCallback() بدلاً من ذلك.

عندما يرصد النظام شبكة مناسبة، يتصل بالشبكة ويستدعي onAvailable() معاودة الاتصال. يمكنك استخدام الكائن Network من معاودة الاتصال للحصول على معلومات إضافية عن الشبكة أو لتوجيه الزيارات لاستخدام الشبكة المحدّدة.

بلوتوث منخفض الطاقة

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

تتيح واجهات برمجة التطبيقات android.bluetooth.le الجديدة لتطبيقاتك إمكانية بث الإعلانات والبحث عن الردود وإجراء اتصالات باستخدام أجهزة Bluetooth LE المجاورة. لاستخدام الميزات الجديدة للإعلانات وعمليات الفحص، أضِف إذن BLUETOOTH_ADMIN في بيان التطبيق. عندما يحدِّث المستخدمون تطبيقك أو ينزِّلونه من "متجر Play"، يطلب منهم منح الإذن التالي لتطبيقك: "معلومات الاتصال عبر البلوتوث: يسمح هذا الإذن للتطبيق بالتحكّم في البلوتوث، بما في ذلك البث إلى الأجهزة القريبة التي تتضمّن بلوتوث أو الحصول على معلومات عنها".

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

يقدّم Android 5.0 الفئة ScanFilter بحيث يمكن لتطبيقك البحث عن أنواع الأجهزة التي يهمّها فقط. لبدء البحث عن أجهزة Bluetooth LE، يمكنك الاتصال بالرقم startScan() وتمرير قائمة الفلاتر. في طلب الإجراء، عليك أيضًا توفير عملية تنفيذ ScanCallback للإبلاغ عن حالة العثور على إعلان Bluetooth LE.

تحسينات NFC

يضيف Android 5.0 هذه التحسينات لتوفير تقنية NFC على نطاق أوسع وأكثر مرونة:

  • تتوفر ميزة "شعاع Android" الآن في قائمة المشاركة.
  • يمكن لتطبيقك استدعاء شعاع Android على جهاز المستخدم لمشاركة البيانات من خلال الاتصال بـ invokeBeam(). وبذلك لن يحتاج المستخدم إلى النقر يدويًا على الجهاز مقابل جهاز آخر متوافق مع تقنية NFC لإكمال عملية نقل البيانات.
  • يمكنك استخدام طريقة createTextRecord() الجديدة لإنشاء سجلّ NDEF يتضمن بيانات نصية بتنسيق UTF-8.
  • إذا كنت تطوّر أحد تطبيقات الدفع، يمكنك الآن تسجيل معرّف تطبيق NFC ديناميكيًا من خلال الاتصال على registerAidsForService(). ويمكنك أيضًا استخدام setPreferredService() لضبط خدمة محاكاة البطاقة المفضّلة التي يجب استخدامها عند ظهور نشاط معيّن في المقدّمة.

مشروع فولتا

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

جدولة المهام

يوفر Android 5.0 واجهة برمجة تطبيقات JobScheduler جديدة تتيح لك تحسين عمر البطارية من خلال تحديد مهام لتشغيل النظام بشكل غير متزامن في وقت لاحق أو في ظل ظروف محددة (مثل وقت شحن الجهاز). تكون جدولة الوظيفة مفيدة في مواقف مثل:

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

يتم تضمين وحدة العمل في كائن JobInfo. يحدد هذا الكائن معايير الجدولة.

استخدِم الصف JobInfo.Builder لضبط كيفية تشغيل المهمة المُجدوَلة. يمكنك جدولة المهمة لتشغيلها في ظل شروط محددة، مثل:

  • تفعيل الميزة أثناء شحن الجهاز
  • البدء عند اتصال الجهاز بشبكة لا تفرض تكلفة استخدام
  • البدء عندما يكون الجهاز غير نشِط لفترة قصيرة
  • الانتهاء قبل موعد نهائي معين أو بأقل تأخير

على سبيل المثال، يمكنك إضافة رموز برمجية مثل هذا لتشغيل مهمتك على شبكة لا تفرض تكلفة استخدام:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

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

للاطّلاع على مثال حول كيفية استخدام واجهة برمجة التطبيقات JobScheduler، يمكنك الرجوع إلى نموذج تنفيذ سياسة JobSchedulerSample في هذا الإصدار.

أدوات المطوّرين لاستخدام البطارية

يُنشئ الأمر dumpsys batterystats الجديد بيانات إحصائية مثيرة للاهتمام حول استخدام البطارية على أحد الأجهزة، ويتم تنظيمها حسب معرّف المستخدم الفريد (UID). تشمل الإحصاءات ما يلي:

  • سجلّ الأحداث المتعلّقة بالبطارية
  • الإحصاءات العامة للجهاز
  • الاستخدام التقريبي للطاقة لكل المعرّف الفريد ومكوِّن النظام
  • الجوّال لكل تطبيق ملي ثانية لكل حزمة
  • الإحصاءات المجمّعة للمعرّف الفريد الخاص بالنظام
  • الإحصاءات المجمّعة للمعرّف الفريد للتطبيق

يمكنك استخدام خيار --help للتعرّف على الخيارات المختلفة لتصميم المخرجات. على سبيل المثال، لطباعة إحصاءات استخدام البطارية لحزمة تطبيق معيّنة منذ آخر مرة تم فيها شحن الجهاز، شغِّل هذا الأمر:

$ adb shell dumpsys batterystats --charged <package-name>

يمكنك استخدام أداة البطارية Historian في ناتج الأمر dumpsys لإنشاء تمثيل بصري بتنسيق HTML للأحداث المتعلّقة بالطاقة من السجلات. تسهل هذه المعلومات عليك فهم وتشخيص أي مشكلات تتعلق بالبطارية.

Android في مكان العمل وفي التعليم

إدارة الحسابات المُدارة

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

لبدء عملية توفير المتطلبات اللازمة، أرسِل ACTION_PROVISION_MANAGED_PROFILE في Intent. في حال نجحت المكالمة، سيشغّل النظام معاودة الاتصال بـ onProfileProvisioningComplete(). يمكنك بعد ذلك الاتصال بالرقم setProfileEnabled() لتفعيل هذا الملف الشخصي المُدار.

لا يتم تفعيل سوى مجموعة فرعية صغيرة من التطبيقات في الملف الشخصي المُدار. يمكنك تثبيت تطبيقات إضافية في الملف الشخصي المُدار عن طريق الاتصال على enableSystemApp().

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

للاطّلاع على كيفية استخدام الوظائف الجديدة، يمكنك الرجوع إلى نموذج تنفيذ علامة BasicManagedProfile في هذا الإصدار.

مالك الجهاز

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

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

تثبيت الشاشة

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

هناك طريقتان لتفعيل تثبيت الشاشة:

  • يدويًا: يمكن للمستخدمين تفعيل تثبيت الشاشة في الإعدادات > الأمان > تثبيت الشاشة، واختيار المهام التي يريدون تثبيتها عن طريق لمس رمز الدبوس الأخضر في شاشة "أحدث التطبيقات".
  • بشكل آلي: لتفعيل تثبيت الشاشة آليًا، يمكنك طلب رمز startLockTask() من تطبيقك. وإذا لم يكن التطبيق المطلوب مالكًا للجهاز، سيُطلب من المستخدم التأكيد. يمكن لتطبيق مالك الجهاز طلب الإجراء setLockTaskPackages() لتفعيل إمكانية تثبيت التطبيقات بدون خطوة تأكيد المستخدم.

عندما يكون قفل المهام مفعَّلاً، يحدث السلوك التالي:

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

إطار عمل الطباعة

عرض ملف PDF كصورة نقطية

يمكنك الآن عرض صفحات مستندات PDF إلى صور نقطية لطباعتها باستخدام فئة PdfRenderer الجديدة. عليك تحديد عنصر ParcelFileDescriptor يمكن البحث عنه (أي إمكانية الوصول العشوائي إلى المحتوى) الذي يكتب النظام عليه المحتوى القابل للطباعة. يمكن لتطبيقك الحصول على صفحة لعرضها باستخدام openPage()، ثم استدعاء render() لتحويل PdfRenderer.Page المفتوح إلى صورة نقطية. يمكنك أيضًا ضبط معلَمات إضافية إذا أردت فقط تحويل جزء من المستند إلى صورة نقطية (على سبيل المثال، لتنفيذ العرض المقسّم إلى أجزاء لتكبير المستند).

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

النظام

إحصاءات استخدام التطبيق

يمكنك الآن الوصول إلى سجلّ استخدام التطبيقات على جهاز Android باستخدام واجهة برمجة تطبيقات android.app.usage الجديدة. وتوفّر واجهة برمجة التطبيقات هذه معلومات استخدام أكثر تفصيلاً من طريقة getRecentTasks() المتوقّفة نهائيًا. لاستخدام واجهة برمجة التطبيقات هذه، عليك أولاً تعريف إذن "android.permission.PACKAGE_USAGE_STATS" في ملف البيان. على المستخدم أيضًا تفعيل إمكانية الوصول لهذا التطبيق من خلال الإعدادات > الأمان > التطبيقات التي يمكنها الوصول إلى بيانات الاستخدام.

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

  • البيانات اليومية: 7 أيام
  • البيانات الأسبوعية: 4 أسابيع
  • البيانات الشهرية: 6 أشهر
  • البيانات السنوية: عامان

لكل تطبيق، يسجل النظام البيانات التالية:

  • آخر مرة تم استخدام التطبيق فيها
  • إجمالي مدة بقاء التطبيق في المقدّمة خلال تلك الفترة الزمنية (حسب اليوم أو الأسبوع أو الشهر أو السنة)
  • تسجيل الطابع الزمني عند انتقال مكوّن (يتم تحديده من خلال اسم الحزمة والنشاط) إلى المقدّمة أو الخلفية خلال يوم
  • تسجيل الطابع الزمني عند تغيير إعداد الجهاز (مثل تغيير اتجاه الجهاز بسبب الدوران)

الاختبار وإمكانية الوصول

تحسينات على ميزات تسهيل الاستخدام والاختبار

يضيف Android 5.0 الدعم التالي للاختبار وإمكانية الوصول:

  • تلتقط الطريقتان getWindowAnimationFrameStats() وgetWindowContentFrameStats() الجديدتان إحصاءات الإطار للصور المتحركة والمحتوى للنوافذ. وتتيح لك هذه الطرق كتابة اختبارات قياس الأداء لتقييم ما إذا كان التطبيق يعرض الإطارات بمعدّل إعادة تحميل كافٍ لتوفير تجربة مستخدم سلسة.
  • تتيح لك طريقة executeShellCommand() الجديدة تنفيذ أوامر واجهة الأوامر من اختبار قياس الأدوات. إنّ تنفيذ الأوامر يشبه تشغيل adb shell من مضيف متّصل بالجهاز، ما يتيح لك استخدام أدوات الوصول إلى واجهة الأوامر مثل dumpsys وam وcontent وpm.
  • يمكن الآن لخدمات تسهيل الاستخدام وأدوات الاختبار التي تستخدم واجهات برمجة التطبيقات لتسهيل الاستخدام (مثل UiAutomator) استرداد معلومات مفصّلة حول خصائص النوافذ على الشاشة التي يمكن للمستخدمين المبصر التفاعل معها. لاسترداد قائمة من عناصر AccessibilityWindowInfo، عليك استدعاء طريقة getWindows() الجديدة.
  • تتيح لك الفئة AccessibilityNodeInfo.AccessibilityAction الجديدة تحديد إجراءات عادية أو مخصّصة لتنفيذها في AccessibilityNodeInfo. تحلّ الفئة AccessibilityNodeInfo.AccessibilityAction الجديدة محلّ واجهات برمجة التطبيقات المتعلّقة بالإجراءات والتي سبق العثور عليها في AccessibilityNodeInfo.
  • يوفّر Android 5.0 إمكانية التحكّم بشكل أدق في عملية تحويل النص إلى كلام داخل التطبيق. وتتيح الفئة Voice الجديدة للتطبيق استخدام ملفات شخصية صوتية مرتبطة بلغات معيّنة وجودة ووقت استجابة معيّنين ومعلَمات خاصة بمحرّك تحويل النص إلى كلام.

أداة IME

سهولة التبديل بين لغات الإدخال

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

بالإضافة إلى ذلك، يتحقق إطار العمل الآن مما إذا كان محرر IME التالي يشتمل على آلية تبديل على الإطلاق (وبالتالي، ما إذا كان IME يتيح التبديل إلى IME بعده). ولن ينتقل محرر أسلوب الإدخال الذي يشتمِل على آلية تبديل إلى أداة IME بدونها. يتم تنفيذ هذا التغيير في السلوك باستخدام الطريقة switchToNextInputMethod().

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

نماذج البيان

الميزات المطلوبة التي يمكن تعريفها

أصبحت القيم التالية متوافقة الآن في العنصر <uses-feature>، لذلك يمكنك التأكّد من أنّ تطبيقك لا يتم تثبيته إلا على الأجهزة التي توفِّر الميزات التي يحتاجها تطبيقك.

أذونات المستخدمين

أصبح الإذن التالي متاحًا الآن في عنصر <uses-permission> لتوضيح الأذونات التي يتطلبها تطبيقك للوصول إلى واجهات برمجة تطبيقات معيّنة.

  • BIND_DREAM_SERVICE: عند استهداف المستوى 21 من واجهة برمجة التطبيقات أو المستوى الأعلى، يجب الحصول على هذا الإذن من خلال خدمة Daydream، لضمان أن النظام وحده هو من يمكنه الارتباط به.