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

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

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

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

للحصول على نظرة شاملة على ميزات النظام الأساسي الجديدة، يمكنك بدلاً من ذلك الاطّلاع على أبرز ميزات Android Lollipop.

بدء التطوير

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

بالإضافة إلى ذلك، يدعم هذا الإصدار المعايير المفتوحة مع WebAudio و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 (AID) ديناميكيًا عن طريق الاتصال بـ 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 API، يمكنك الرجوع إلى نموذج تنفيذ JobSchedulerSample في هذا الإصدار.

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

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

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

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

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

يمكنك استخدام أداة Battery 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 API الجديدة. توفّر واجهة برمجة التطبيقات هذه معلومات استخدام أكثر تفصيلاً مقارنةً بطريقة 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) بدون واحدة. يتم تنفيذ هذا التغيير في السلوك باستخدام طريقة switchToNextInputMethod().

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

نماذج البيان

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

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

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

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

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