مستوى واجهة برمجة التطبيقات: 21
يوفّر Android 5.0 (LOLLIPOP) ميزات جديدة للمستخدمين ومطوّري التطبيقات. يقدّم هذا المستند intro إلى واجهات برمجة التطبيقات الجديدة الأكثر بروزًا.
إذا كان لديك تطبيق منشور، احرص على الاطّلاع على تغييرات السلوك في Android 5.0 التي يجب مراعاتها في تطبيقك. قد تؤثر تغييرات السلوك هذه في تطبيقك على أجهزة Android 5.0، حتى إذا لم تكن تستخدِم واجهات برمجة تطبيقات جديدة أو تستهدِف وظائف جديدة.
للحصول على نظرة عامة على ميزات النظام الأساسي الجديدة، يمكنك بدلاً من ذلك الاطّلاع على أهم الميزات في Android Lollipop .
ابدأ التطوير
لبدء إنشاء تطبيقات لنظام التشغيل Android 5.0، عليك أولاً الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android. بعد ذلك، استخدِم مدير حزمة تطوير البرامج (SDK) لتنزيل النظام الأساسي لحزمة تطوير البرامج (SDK) لنظام التشغيل Android 5.0 وصور النظام.
تعديل مستوى واجهة برمجة التطبيقات المستهدَف
لتحسين تطبيقك بشكل أفضل على الأجهزة التي تعمل بنظام 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"
في البيان.
لتجنُّب تشويش شاشة "التطبيقات المستخدَمة مؤخرًا"، يمكنك ضبط الحد الأقصى لعدد tasks من تطبيقك الذي يمكن أن يظهر في هذه الشاشة. لإجراء ذلك، اضبط
سمة <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
الفئة في نموذج المشروع.
الإشعارات
إشعارات شاشة القفل
تتمتع شاشات القفل في الإصدار 5.0 من نظام التشغيل Android بإمكانية تقديم الإشعارات. يمكن للمستخدمين اختيار ما إذا كانوا يريدون السماح بعرض محتوى الإشعارات الحسّاس على شاشة قفل آمنة من خلال الإعدادات.
يمكن لتطبيقك التحكم في مستوى التفاصيل المرئية عند عرض إشعاراته على شاشة القفل الآمنة. للتحكّم في مستوى الرؤية، اتصل بالرقم
setVisibility()
وحدد إحدى القيم التالية:
VISIBILITY_PRIVATE
: يعرض معلومات أساسية، مثل رمز الإشعار، ولكنه يخفي المحتوى الكامل للإشعار.VISIBILITY_PUBLIC
: يعرض هذا الخيار المحتوى الكامل الخاص بالإشعار.VISIBILITY_SECRET
: لا يتم عرض أي شيء، بما في ذلك رمز الإشعار.
عندما يكون مستوى الظهور هو VISIBILITY_PRIVATE
، يمكنك أيضًا تقديم نسخة مخفيّة من محتوى الإشعار يخفي التفاصيل الشخصية. على سبيل المثال، قد يعرض تطبيق SMS إشعارًا يعرض "لديك 3 رسائل نصية جديدة" ولكنه يخفي محتوى الرسالة والمرسلين. لتقديم هذا الإشعار البديل، عليك أولاً إنشاء
الإشعار البديل باستخدام Notification.Builder
. عند إنشاء كائن الإشعار الخاص، يمكنك إرفاق الإشعار البديل به من خلال الطريقة setPublicVersion()
.
البيانات الوصفية للإشعارات
يستخدم الإصدار 5.0 من نظام التشغيل Android البيانات الوصفية المرتبطة بإشعارات تطبيقك
لترتيب الإشعارات بشكل أكثر ذكاءً. لضبط البيانات الوصفية، يمكنك طلب الطرق التالية في 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 ما يلي:
- أدوات تظليل الحوسبة
- عناصر مخطِّط الإضاءة المنفصلة
- أوامر الرسم غير المباشرة
- زخارف متعددة النماذج والاستنسل
- تحسينات على لغة التظليل
- إضافات لأوضاع الدمج المتقدّمة وتصحيح الأخطاء
- التوافق مع الأنظمة القديمة مع الإصدارين 2.0 و3.0 من OpenGL ES
يتم توفير واجهة 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
يمكنها التحكّم يدويًا في عملية الالتقاط والمعالجة اللاحقة، كما يمكنها التقاط صور عالية الدقة بمعدّلات لقطات عالية.
للاطّلاع على كيفية استخدام واجهة برمجة التطبيقات المعدّلة
Camera
، يمكنك الرجوع إلى 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 أو شبكة الفوترة من مشغّل شبكة الجوّال، أو إذا كنت تريد إرسال البيانات باستخدام نوع معيّن من بروتوكول النقل.
لاختيار شبكة والاتصال بها ديناميكيًا من تطبيقك، اتّبِع الخطوات التالية:
- أنشئ
ConnectivityManager
. - استخدِم الفئة
NetworkRequest.Builder
لإنشاء عنصرNetworkRequest
وتحديد ميزات الشبكة ونوع النقل الذي يهتم به تطبيقك. - للبحث عن شبكات مناسبة، يمكنك طلب
requestNetwork()
أوregisterNetworkCallback()
، وإدخال الكائنNetworkRequest
وتنفيذConnectivityManager.NetworkCallback
. استخدِم طريقةrequestNetwork()
إذا أردت التبديل بشكل نشط إلى شبكة مناسبة عند رصدها. ولتلقّي إشعارات للشبكات التي تم فحصها فقط بدون التبديل النشط، استخدِم الطريقةregisterNetworkCallback()
بدلاً من ذلك.
عندما يرصد النظام شبكة مناسبة، يتصل بها ويشغّل onAvailable()
الاستدعاء. يمكنك استخدام عنصر Network
من طلب إعادة الاتصال للحصول على
معلومات إضافية عن الشبكة، أو لتوجيه الزيارات لاستخدام
الشبكة المحدّدة.
بلوتوث منخفض الطاقة
وفّر نظام التشغيل Android 4.3 إمكانات استخدام البلوتوث المنخفض الطاقة (Bluetooth LE) في الدور المركزي. في الإصدار 5.0 من نظام التشغيل Android، يمكن لجهاز Android الآن العمل كجهاز طرفي يستخدم تقنية Bluetooth LE. ويمكن للتطبيقات استخدام هذه الإمكانية للإعلان عن وجودها للأجهزة المجاورة يمكنك مثلاً إنشاء تطبيقات تتيح للجهاز العمل كعدّاد خطوات أو أداة لمراقبة الصحة وتوصيل بياناته مع جهاز آخر يستخدم Bluetooth LE.
تتيح واجهات برمجة التطبيقات الجديدة لنظام android.bluetooth.le
لتطبيقاتك بث الإعلانات والبحث عن الردود وإنشاء اتصالات بأجهزة android.bluetooth.le
LE Bluetooth المجاورة. لاستخدام ميزتَي الإعلان والمسح الضوئي الجديدتَين، أضِف الإذن
BLUETOOTH_ADMIN
في البيان. عندما يُجري المستخدمون تحديثًا لتطبيقك أو ينزّلونه من "متجر Play"،
يُطلب منهم منح تطبيقك الإذن التالي:
"معلومات الاتصال عبر البلوتوث: يسمح هذا الإذن للتطبيق بالتحكّم في البلوتوث،
بما في ذلك البث إلى أجهزة البلوتوث المجاورة أو الحصول على معلومات عنها".
لبدء عرض الإعلانات باستخدام بروتوكول Bluetooth LE كي تتمكّن الأجهزة الأخرى من اكتشاف
تطبيقك، يمكنك الاتصال بـ
startAdvertising()
وإرسال عملية تنفيذ لفئة
AdvertiseCallback
. يتلقّى عنصر ردّ الاتصال
تقريرًا عن نجاح العملية الإعلانية أو تعذّرها.
يقدّم الإصدار Android 5.0 الفئة ScanFilter
كي يتمكّن تطبيقك من البحث عن أنواع الأجهزة التي يهتم بها فقط. لبدء البحث عن أجهزة تتضمّن بلوتوث، يُرجى الاتصال بالرقم startScan()
وإضافة قائمة من الفلاتر. في طلب الطريقة، يجب أيضًا تقديم
تنفيذ ScanCallback
للإبلاغ عند عثور الجهاز على
إعلان Bluetooth LE.
تحسينات على تقنية NFC
يضيف الإصدار 5.0 من Android التحسينات التالية للسماح باستخدام تقنية NFC على نطاق أوسع وبطريقة أكثر مرونة:
- يتوفر شعاع Android الآن في قائمة مشاركة.
- يمكن لتطبيقك استدعاء شعاع Android على جهاز المستخدم لمشاركة البيانات من خلال الاتصال
بـ
invokeBeam()
. وبذلك لا يحتاج المستخدم إلى النقر يدويًا على الجهاز من خلال جهاز آخر متوافق مع تكنولوجيا NFC لإكمال عملية نقل البيانات. - يمكنك استخدام الطريقة الجديدة
createTextRecord()
لإنشاء سجلّ NDEF يحتوي على بيانات نصية بتنسيق UTF-8. - إذا كنت بصدد تطوير تطبيق دفع، يمكنك الآن
تسجيل معرّف تطبيق NFC (AID) ديناميكيًا من خلال الاتصال بـ
registerAidsForService()
. يمكنك أيضًا استخدامsetPreferredService()
لضبط خدمة محاكاة البطاقة المفضّلة التي يجب استخدامها عندما يكون نشاط معيّن في المقدّمة.
Project Volta
بالإضافة إلى الميزات الجديدة، يركز نظام التشغيل 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
الجديدة. تقدّم واجهة برمجة التطبيقات هذه معلومات استخدام
أكثر تفصيلاً من طريقة
getRecentTasks()
التي سيتم إيقافها نهائيًا.
لاستخدام واجهة برمجة التطبيقات هذه، يجب أولاً الإفصاح عن إذن
"android.permission.PACKAGE_USAGE_STATS"
في ملف البيان.
وعلى المستخدم أيضًا تفعيل إمكانية الوصول لهذا التطبيق من خلال الإعدادات > الأمان > التطبيقات
مع إمكانية الوصول إلى بيانات الاستخدام.
يجمع النظام بيانات الاستخدام على أساس كل تطبيق، كما يجمع البيانات على فترات يومية وأسبوعية وشهرية وسنوية. الحد الأقصى لمدة احتفاظ النظام بهذه البيانات هو كما يلي:
- البيانات اليومية: 7 أيام
- البيانات الأسبوعية: 4 أسابيع
- البيانات الشهرية: 6 أشهر
- البيانات السنوية: سنتان
بالنسبة إلى كل تطبيق، يسجّل النظام البيانات التالية:
- آخر مرة تم فيها استخدام التطبيق
- إجمالي مدّة بقاء التطبيق في المقدّمة خلال ذلك الفاصل الزمني (حسب اليوم أو الأسبوع أو الشهر أو السنة)
- تسجيل الطابع الزمني عند نقل مكوّن (يتم تحديده من خلال اسم الحزمة والنشاط) إلى المقدّمة أو الخلفية خلال اليوم
- تسجيل الطابع الزمني عند تغيير إعدادات الجهاز (مثلاً عند تغيير اتجاه الجهاز بسبب التدوير)
الاختبار وإمكانية الوصول
تحسين الاختبار وإمكانية الوصول
يضيف نظام التشغيل Android 5.0 الميزات التالية للاختبار وتسهيل الاستخدام:
- تلتقط الطريقتان الجديدتان
getWindowAnimationFrameStats()
وgetWindowContentFrameStats()
إحصاءات اللقطات للمحتوى والرسوم المتحركة للنوافذ. تتيح لك هذه الطرق كتابة اختبارات الأدوات لتقييم ما إذا كان التطبيق يعرض اللقطات بمعدّل تكرار كافٍ لإعادة التحميل من أجل توفير تجربة سلسة للمستخدم. - تتيح لك الطريقة الجديدة
executeShellCommand()
تنفيذ أوامر shell من اختبار أداة القياس. يشبه تنفيذ الأمر تشغيلadb shell
من مضيف متّصل بالجهاز، ما يتيح لك استخدام أدوات مستنِدة إلى واجهة الأوامر، مثلdumpsys
وam
وcontent
وpm
. - يمكن الآن لخدمات تسهيل الاستخدام وأدوات الاختبار التي تستخدِم واجهات برمجة التطبيقات الخاصة بتسهيل الاستخدام
(مثل
UiAutomator
) استرداد معلومات مفصّلة عن خصائص النوافذ على الشاشة التي يمكن للمستخدمين المبصرين التفاعل معها. لاسترداد قائمة بعناصرAccessibilityWindowInfo
، يمكنك استدعاء الأسلوب الجديدgetWindows()
. - تتيح لك فئة
AccessibilityNodeInfo.AccessibilityAction
الجديدة تحديد إجراءات عادية أو مخصّصة لتنفيذها علىAccessibilityNodeInfo
. تحلّ فئةAccessibilityNodeInfo.AccessibilityAction
الجديدة محل واجهات برمجة التطبيقات ذات الصلة بالإجراءات والتي كانت متوفّرة سابقًا فيAccessibilityNodeInfo
. - يقدّم نظام التشغيل Android 5.0 إمكانية التحكّم بشكل أدق في عملية تحويل النص إلى كلام في
تطبيقك. تسمح فئة
Voice
الجديدة لتطبيقك باستخدام ملفّات تعريف الأصوات المرتبطة بلغات معيّنة وتقييم الجودة والمهلة والمَعلمات الخاصة بمحرك تحويل النص إلى كلام.
أداة IME
سهولة التبديل بين لغات الإدخال
بدءًا من الإصدار 5.0 من نظام التشغيل Android، يمكن للمستخدمين التبديل بسهولة أكبر بين جميع أدوات تحرير طرق الإدخال (IME) المتوافقة مع النظام الأساسي. يؤدي تنفيذ إجراء التبديل المحدَّد (عادةً ما يكون النقر على رمز الكرة الأرضية على لوحة المفاتيح المتوفّرة على الشاشة) إلى التبديل بين كل تطبيقات IME هذه. يتم تنفيذ هذا التغيير في السلوك من خلال الأسلوب
shouldOfferSwitchingToNextInputMethod()
.
بالإضافة إلى ذلك، يتحقّق إطار العمل الآن ممّا إذا كان أسلوب إدخال النصوص التالي يتضمّن
آلية تبديل على الإطلاق (وبالتالي، ما إذا كان أسلوب إدخال النصوص هذا يتيح التبديل إلى
أسلوب إدخال النصوص التالي). لن تنتقل أداة IME التي تتضمّن آلية تبديل إلى أداة IME لا تتضمّن آلية تبديل. يتم تنفيذ هذا
التغيير في السلوك من خلال الأسلوب
switchToNextInputMethod()
.
للاطّلاع على مثال حول كيفية استخدام واجهات برمجة التطبيقات المعدّلة لتبديل IME، يُرجى الرجوع إلى نموذج تنفيذ لوحة المفاتيح الرقمية المعدّلة في هذا الإصدار. لمزيد من المعلومات عن كيفية تنفيذ التبديل بين طرق إدخال النصوص، يُرجى الاطّلاع على مقالة إنشاء طريقة إدخال.
بيانات البيان
الميزات المطلوبة التي يمكن الإفصاح عنها
أصبحت القيم التالية متاحة الآن في عنصر
<uses-feature>
،
حتى تتأكّد من تثبيت تطبيقك فقط على الأجهزة التي
توفّر الميزات التي يحتاج إليها تطبيقك.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
أذونات المستخدمين
أصبح الإذن التالي متوافقًا الآن مع العنصر
<uses-permission>
لإدراج الأذونات التي يتطلبها تطبيقك للوصول إلى واجهات برمجة تطبيقات معيّنة.
BIND_DREAM_SERVICE
: عند استهداف المستوى 21 أو أعلى من واجهة برمجة التطبيقات، يتطلب إذن الوصول إلى Daydream هذا الإذن لضمان أنّه لا يمكن للنظام إلا الربط به.