مستوى واجهة برمجة التطبيقات: 12
بالنسبة إلى المطورين، يتوفر نظام Android 3.1 الأساسي
(HONEYCOMB_MR1
) كمكوِّن قابل للتنزيل لحزمة تطوير البرامج (SDK) لنظام التشغيل Android. وتشتمل المنصة القابلة للتنزيل على مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من مظاهر المحاكيات وغير ذلك. لا يحتوي النظام الأساسي القابل للتنزيل على أي مكتبات خارجية.
بالنسبة إلى المطورين، يتوفر نظام Android 3.1 الأساسي كمكون قابل للتنزيل لحزمة تطوير البرامج (SDK) لنظام التشغيل Android. وتشتمل المنصة القابلة للتنزيل على مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من مظاهر المحاكيات وغير ذلك. لبدء تطوير البرامج أو الاختبار باستخدام Android 3.1، استخدم مدير SDK لنظام التشغيل Android لتنزيل النظام الأساسي إلى حزمة SDK.
نظرة عامة على واجهة برمجة التطبيقات
تقدّم الأقسام أدناه نظرة عامة فنية على الميزات الجديدة لمطوّري البرامج في Android 3.1، بما في ذلك الميزات والتغييرات الجديدة في واجهة برمجة التطبيقات لإطار العمل منذ الإصدار السابق.
واجهات برمجة تطبيقات USB
يقدم Android 3.1 واجهات برمجة تطبيقات جديدة وفعّالة لدمج الأجهزة الملحقة المتصلة مع التطبيقات التي يتم تشغيلها على النظام الأساسي. وتستند واجهات برمجة التطبيقات إلى حزمة USB (ناقل تسلسلي عالمي) وخدمات مدمَجة في النظام الأساسي، بما في ذلك دعم كل من مضيف USB وتفاعلات الأجهزة. باستخدام واجهات برمجة التطبيقات، يمكن للمطورين إنشاء تطبيقات قادرة على اكتشاف مجموعة متنوعة من أنواع الأجهزة المتصلة عبر USB والتواصل معها وإدارتها.
يميّز الحزمة وواجهات برمجة التطبيقات نوعين أساسيين من أجهزة USB، بناءً على ما إذا كان الجهاز الذي يعمل بنظام التشغيل Android يعمل كمضيف أم أن الأجهزة الخارجية تعمل كمضيف:
- جهاز USB هو قطعة من الأجهزة المتصلة تعتمد على الجهاز الذي يعمل بنظام التشغيل Android ليعمل كمضيف. على سبيل المثال، معظم أجهزة الإدخال وأجهزة الماوس وأذرع التحكم عبارة عن أجهزة USB، وكذلك العديد من الكاميرات والموزعات (hub) وغير ذلك.
- ملحق USB هو قطعة من الأجهزة المتّصلة تتضمّن وحدة تحكّم للمضيف من خلال USB، وتوفّر الطاقة، ومصمّمة للاتصال بالأجهزة التي تعمل بنظام التشغيل Android عبر USB. ويمكن توصيل مجموعة متنوعة من الأجهزة الملحقة كملحقات، بدءًا من وحدات التحكّم في الروبوتات ووصولاً إلى المعدات الموسيقية ودراجات التمارين الرياضية وغير ذلك.
بالنسبة إلى كلا النوعين، وهما أجهزة USB وملحقات USB، تتيح واجهات برمجة تطبيقات USB الخاصة بالنظام الأساسي الاكتشاف حسب الغرض من البث عند التوصيل أو الفصل، بالإضافة إلى الواجهات العادية ونقاط النهاية وأوضاع النقل (التحكّم والتجميع والمقاطعة).
تتوفّر واجهات برمجة تطبيقات USB في الحزمة android.hardware.usb
. الفئة المركزية هي UsbManager
، وهي توفّر طرقًا مساعِدة للتعرّف على كل من أجهزة USB وملحقات USB والتواصل معها. ويمكن للتطبيقات الحصول على مثيل UsbManager
ثم طلب البحث عن قائمة الأجهزة أو الملحقات
المتصلة بها والتواصل معها أو إدارتها.
يعلن UsbManager
أيضًا عن إجراءات الغرض التي يبثها
النظام، للإعلان عن توصيل جهاز USB أو
ملحق به أو فصله.
وتشمل الصفوف الأخرى ما يلي:
UsbDevice
، وهي فئة تمثل الأجهزة الخارجية المتصلة كجهاز USB (حيث يعمل الجهاز الذي يعمل بنظام التشغيل Android كمضيف).UsbAccessory
، الذي يمثل الأجهزة الخارجية المتصلة كمضيف USB (من خلال الجهاز الذي يعمل بنظام التشغيل Android والذي يعمل كجهاز USB).UsbInterface
وUsbEndpoint
، واللذين يوفران إمكانية الوصول إلى واجهات USB العادية ونقاط النهاية لجهاز.UsbDeviceConnection
وUsbRequest
، لإرسال البيانات واستلامها والتحكّم في الرسائل من جهاز USB أو منه، على نحو متزامن وغير متزامن.UsbConstants
، التي توفّر ثوابتًا لتعريف أنواع نقاط النهاية وفئات الأجهزة وما إلى ذلك.
تجدر الإشارة إلى أنّه على الرغم من أنّ حزمة USB مدمَجة في النظام الأساسي، فإنّ الشركات المصنّعة تتولّى تحديد الدعم الفعلي لمضيف USB وأوضاع الملحقات المفتوحة على أجهزة معيّنة. وبشكل خاص، يعتمد وضع المضيف على أجهزة وحدة تحكم USB المناسبة في الجهاز الذي يعمل بنظام التشغيل Android.
بالإضافة إلى ذلك، يمكن للمطوّرين طلب إجراء فلترة على Google Play كي لا تكون تطبيقاتهم متاحة للمستخدمين الذين لا توفّر أجهزتهم دعم USB المناسب. لطلب التصفية، أضف أحد العنصرين أدناه أو كليهما إلى بيان التطبيق، حسبما تقتضي الحاجة:
- إذا كان التطبيق يجب أن يكون مرئيًا فقط للأجهزة التي تتوافق مع وضع مضيف USB (اتصال أجهزة USB)، يُرجى توضيح هذا العنصر:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- إذا كان التطبيق يجب أن يكون مرئيًا فقط للأجهزة التي تتوافق مع ملحقات USB (اتصال مضيفي USB)، يُرجى توضيح هذا العنصر:
<uses-feature android:name="android.hardware.usb.accessory" android:required="true">
للحصول على معلومات كاملة حول كيفية تطوير التطبيقات التي تتفاعل مع ملحقات USB، يُرجى مراجعة مستندات المطوّرين.
للاطّلاع على نماذج من التطبيقات التي تستخدم واجهة برمجة تطبيقات مضيف USB، يمكنك الاطّلاع على اختبار AAD وMissile Launcher.
واجهة برمجة تطبيقات MTP/PTP
يعرض نظام التشغيل Android 3.1 واجهة برمجة تطبيقات جديدة لبروتوكول MTP تتيح للتطبيقات التفاعل مباشرةً مع الكاميرات المتصلة وأجهزة PTP الأخرى. وتسهّل واجهة برمجة التطبيقات الجديدة على التطبيق تلقّي الإشعارات عند توصيل الأجهزة وإزالتها، وإدارة الملفات والتخزين على هذه الأجهزة، ونقل الملفات والبيانات الوصفية منها وإليها. تنفّذ واجهة برمجة تطبيقات بروتوكول نقل الوسائط (MTP) المجموعة الفرعية لبروتوكول نقل الصور (PTP) من مواصفات بروتوكول نقل الوسائط (MTP).
تتوفر واجهة برمجة التطبيقات MTP في حزمة android.mtp
وتوفر الفئات التالية:
- يتم تغليف
MtpDevice
جهاز بروتوكول نقل الوسائط (MTP) الذي يتم توصيله من خلال ناقل مضيف USB. ويمكن للتطبيق إنشاء مثيل لكائن من هذا النوع ثم استخدام طرقه للحصول على معلومات حول الجهاز والكائنات المخزنة عليه، بالإضافة إلى فتح الاتصال ونقل البيانات. وتشمل بعض الطرق ما يلي:- تعرض
getObjectHandles()
قائمة بالمؤشرات لجميع الكائنات على الجهاز التي تطابق تنسيقًا محدّدًا وعنصرًا رئيسيًا. للحصول على معلومات حول عنصر ما، يمكن لتطبيق أن ينقل الاسم المعرِّف إلىgetObjectInfo()
. - يسمح
importFile()
للتطبيق بنسخ بيانات عنصر ما إلى ملف في مساحة تخزين خارجية. قد يتم حظر هذه المكالمة لفترة عشوائية من الوقت حسب حجم البيانات وسرعة الأجهزة، لذلك يجب أن يتم إجراؤها من خيط متشابك. open()
يتيح للتطبيق فتح جهاز MTP/PTP متصل.- تعرض
getThumbnail()
الصورة المصغّرة للكائن كصفيف بايت.
- تعرض
- يتضمن
MtpStorageInfo
معلومات عن وحدة تخزين على جهاز MTP، بما يتوافق مع مجموعة بيانات StorageInfo الموضحة في الفقرة 5.2.2 من مواصفات بروتوكول نقل الوسائط (MTP). تتيح الطرق في الفئة للتطبيق الحصول على سلسلة وصف وحدة التخزين، والمساحة الخالية، والحد الأقصى لسعة التخزين، ومعرف التخزين، ومعرف الحجم. - يحتوي
MtpDeviceInfo
على معلومات حول جهاز MTP المتوافق مع مجموعة بيانات DeviceInfo الموضحة في الفقرة 5.1.1 من مواصفات بروتوكول نقل الوسائط (MTP). وتتيح الطرق في هذه الفئة للتطبيقات الحصول على معلومات عن مصنِّع الجهاز وطرازه والرقم التسلسلي وإصداره. - يحتوي
MtpObjectInfo
على معلومات حول عنصر تم تخزينه على جهاز MTP، بما يتوافق مع مجموعة بيانات ObjectInfo الموضحة في الفقرة 5.3.1 من مواصفات بروتوكول نقل الوسائط (MTP). تتيح الطرق في الفئة للتطبيقات الحصول على حجم الكائن، وتنسيق البيانات، ونوع الارتباط، وتاريخ الإنشاء، ومعلومات الصورة المصغرة. - توفر
MtpConstants
ثوابت للإعلام برموز تنسيق ملف MTP ونوع الارتباط وحالة الحماية.
دعم أجهزة الإدخال الجديدة وأحداث الحركة
يعمل Android 3.1 على توسيع النظام الفرعي للإدخال لدعم أجهزة الإدخال الجديدة وأنواع جديدة من أحداث الحركة في جميع طرق العرض والنوافذ. يمكن للمطورين البناء على هذه الإمكانات للسماح للمستخدمين بالتفاعل مع تطبيقاتهم باستخدام أجهزة الماوس وكرات التتبع وذراع التحكم ولوحات التحكم في الألعاب وغيرها من الأجهزة، بالإضافة إلى لوحات المفاتيح وشاشات اللمس.
للتعامل مع الماوس وعجلة التمرير ومدخلات كرة التعقب، تدعم المنصة إجراءين جديدين لأحداث الحركة:
ACTION_SCROLL
الذي يصف موقع المؤشر الذي ظهرت فيه حركة تمرير لا تعمل باللمس، مثل عجلة تمرير الماوس. في MotionEvent، تحدد قيمة المحورينAXIS_HSCROLL
وAXIS_VSCROLL
حركة التمرير النسبية.- تُبيّن
ACTION_HOVER_MOVE
الموضع الحالي للماوس عند عدم الضغط على أي أزرار، بالإضافة إلى أي نقاط وسيطة منذ آخر حدثHOVER_MOVE
. إشعارات التمرير والخروج غير مدعومة حتى الآن.
لإتاحة استخدام ذراع التحكّم ولوحات التحكّم في الألعاب، تتضمّن الفئة InputDevice
مصادر أجهزة الإدخال الجديدة التالية:
SOURCE_CLASS_JOYSTICK
- يحتوي جهاز المصدر على محاور ذراع التحكّم.SOURCE_CLASS_BUTTON
: يحتوي الجهاز المصدر على أزرار أو مفاتيحSOURCE_GAMEPAD
: يتضمّن الجهاز المصدر أزرارًا في لوحة الألعاب مثلKEYCODE_BUTTON_A
أوKEYCODE_BUTTON_B
يشير إلىSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
- يحتوي الجهاز المصدر على محاور ذراع التحكّم. يشير إلى SOURCE_Class_JOYSTICK.
لوصف أحداث الحركة من هذه المصادر الجديدة، فضلاً عن أحداث الفئران وكرات التعقب، أصبح بإمكان النظام الأساسي الآن تحديد رموز المحاور على MotionEvent
بالطريقة نفسها التي تحدّد بها الرموز الرئيسية على KeyEvent
. تشمل رموز المحاور الجديدة لذراع التحكم
ووحدات التحكم في الألعاب
AXIS_HAT_X
وAXIS_HAT_Y
وAXIS_RTRIGGER
وAXIS_ORIENTATION
وAXIS_THROTTLE
وغير ذلك الكثير.
يتم تمثيل محاور MotionEvent
الحالية بالرمز AXIS_X
وAXIS_Y
وAXIS_PRESSURE
وAXIS_SIZE
وAXIS_TOUCH_MAJOR
وAXIS_TOUCH_MINOR
وAXIS_TOOL_MAJOR
وAXIS_TOOL_MINOR
وAXIS_ORIENTATION
.
بالإضافة إلى ذلك، تُحدِّد MotionEvent
عددًا من رموز المحاور العامة التي يتم استخدامها عندما لا يتعرّف إطار العمل على كيفية ربط محور معيّن. يمكن لأجهزة محددة استخدام رموز المحاور العامة لتمرير بيانات الحركة المخصصة إلى التطبيقات. للحصول على قائمة كاملة بالمحاور وتفسيراتها
المقصودة، يمكنك الاطّلاع على مستندات فئة MotionEvent
.
توفّر المنصّة أحداث الحركة للتطبيقات على دفعات، لذلك قد يتضمّن حدث واحد موضعًا حاليًا وما يُعرف باسم التحركات التاريخية المتعددة.
ويجب أن تستخدم التطبيقات getHistorySize()
لمعرفة عدد العينات السابقة، ثم تسترد جميع العينات السابقة وتعالجها باستخدام getHistoricalAxisValue()
. بعد ذلك، من المفترض أن تعالج التطبيقات العيّنة الحالية باستخدام getAxisValue()
.
يمكن استرداد بعض المحاور باستخدام طرق موصّل خاصة. على سبيل المثال،
بدلاً من استدعاء getAxisValue()
، يمكن للتطبيقات استدعاء getX()
. تشمل المحاور التي تتضمّن موصّلات مدمجة AXIS_X
وAXIS_Y
وAXIS_PRESSURE
وAXIS_SIZE
وAXIS_TOUCH_MAJOR
وAXIS_TOUCH_MINOR
وAXIS_TOOL_MAJOR
وAXIS_TOOL_MINOR
وAXIS_ORIENTATION
.
لكل جهاز إدخال رقم تعريف فريد يعيّنه النظام وقد يوفّر أيضًا مصادر متعددة. عندما يوفر جهاز ما مصادر متعددة، يمكن لأكثر من مصدر
أن يوفر بيانات المحور باستخدام نفس المحور. على سبيل المثال، يستخدم حدث لمس يأتي من مصدر اللمس المحور س لبيانات موضع الشاشة، في حين سيستخدم حدث ذراع التحكم القادم من مصدر ذراع التحكم المحور س بالنسبة إلى موضع ذراع التحكم بدلاً من ذلك. لهذا السبب، من المهم أن تفسر التطبيقات قيم المحاور بناءً على المصدر الذي تنشأ منه. عند التعامل مع حدث متحرّك، يجب أن تستخدم التطبيقات طرقًا من الفئة InputDevice
لتحديد المحاور التي يدعمها الجهاز أو المصدر. على وجه التحديد،
يمكن للتطبيقات استخدام getMotionRanges()
للبحث عن جميع محاور الجهاز أو جميع محاور
مصدر معيّن للجهاز. وفي كلتا الحالتين، تحدّد معلومات النطاق للمحاور التي يتم عرضها في الكائن InputDevice.MotionRange
المصدر لكل قيمة محور.
أخيرًا، بما أنّ أحداث الحركة من أذرع التحكّم وأجهزة التحكّم في الألعاب والفأرة
وكرات التعقب ليست أحداثًا باللمس، تضيف المنصة طريقة جديدة لمعاودة الاتصال
لتمريرها إلى View
كأحداث متحركة "عامة".
وعلى وجه التحديد، تُبلِغ عن أحداث الحركة التي لا تعمل باللمس
إلى View
من خلال مكالمة إلى onGenericMotionEvent()
بدلاً من onTouchEvent()
.
توزّع المنصة أحداث الحركة العامة بشكل مختلف بناءً على فئة مصدر الحدث. تنتقل فعاليات SOURCE_CLASS_POINTER
إلى View
أسفل المؤشر، تمامًا مثل آلية عمل
أحداث اللمس. انتقِل إلى View
محل التركيز حاليًا.
على سبيل المثال، يعني ذلك أنّه يجب التركيز على View
لتلقّي أحداث ذراع التحكّم. وإذا لزم الأمر، يمكن للتطبيقات معالجة هذه الأحداث على مستوى "النشاط" أو "مربع الحوار" من خلال تطبيق onGenericMotionEvent()
هناك بدلاً من ذلك.
للاطّلاع على نموذج تطبيق يستخدم أحداث حركة ذراع التحكّم، راجِع GameControllerInput وGameView.
واجهة برمجة تطبيقات بروتوكول RTP
يعرض نظام التشغيل Android 3.1 واجهة برمجة تطبيقات لحزمة بروتوكول النقل في الوقت الفعلي (RTP) المدمَجة، التي يمكن للتطبيقات استخدامها لإدارة بث البيانات عند الطلب أو البيانات التفاعلية. على وجه الخصوص، يمكن للتطبيقات التي توفر بروتوكول الصوت على الإنترنت (VoIP) وميزة الضغط إلى التحدث ومكالمات الفيديو والبث الصوتي استخدام واجهة برمجة التطبيقات لبدء الجلسات ونقل أو استقبال عمليات بث البيانات عبر أي شبكة متاحة.
تتوفّر واجهة برمجة تطبيقات RTP في الحزمة android.net.rtp
. تتضمن
الصفوف ما يلي:
RtpStream
، وهي الفئة الأساسية من مجموعات البث التي ترسل وتستلم حِزم الشبكة مع حمولات الوسائط عبر بروتوكول RTP.AudioStream
، وهي فئة فرعية منRtpStream
تحمل حمولات صوتية باستخدام بروتوكول RTP.AudioGroup
، وهو مركز محلي لإدارة مكبّرات الصوت والميكروفون وAudioStream
ومزج أصواتهما.AudioCodec
، الذي يتضمّن مجموعة من برامج الترميز التي تحدّدها لـAudioStream
.
لإتاحة مكالمات الفيديو الصوتية واستخدامات مشابهة، ينشئ أحد التطبيقات مثيلاً لمجموعتَين كنقاط نهاية للبث:
AudioStream
يحدد نقطة نهاية بعيدة ويتكون من تعيين الشبكة وAudioCodec
تم إعداده.- تمثل
AudioGroup
نقطة النهاية المحلية لـAudioStream
واحد أو أكثر. يمزجAudioGroup
بين جميعAudioStream
ويتفاعل اختياريًا مع مكبر صوت الجهاز والميكروفون في الوقت نفسه.
وتتضمن الطريقة الأبسط استخدام نقطة نهاية واحدة عن بُعد ونقطة نهاية محلية.
بالنسبة إلى الاستخدامات الأكثر تعقيدًا، يُرجى الاطّلاع على القيود الموضّحة في
AudioGroup
.
لاستخدام واجهة برمجة تطبيقات RTP، يجب أن تطلب التطبيقات الإذن من المستخدم من خلال الإعلان عن <uses-permission
android:name="android.permission.INTERNET">
في ملفات البيان. يجب الحصول على إذن <uses-permission
android:name="android.permission.RECORD_AUDIO">
أيضًا للحصول على ميكروفون الجهاز.
أدوات التطبيقات التي يمكن تغيير حجمها
بدءًا من نظام التشغيل Android 3.1، يمكن للمطورين تغيير حجم أدوات الشاشة الرئيسية سواء أفقيًا أو عموديًا أو على المحورين. يضغط المستخدمون مع الاستمرار على الأداة لإظهار مقابض تغيير الحجم، ثم يسحبون المقبضين الأفقية و/أو الرأسية لتغيير الحجم على شبكة التخطيط.
يستطيع المطوِّرون جعل أي أداة على الشاشة الرئيسية قابلة لتغيير الحجم من خلال تحديد
سمة resizeMode
في البيانات الوصفية AppWidgetProviderInfo
الخاصة بالأداة. وتشمل قيم السمة resizeMode
"horizontal" و"vertical" و "none".
لتصنيف تطبيق مصغّر على أنّه قابل لتغيير الحجم أفقيًا وعموديًا، أدخِل القيمة
"horizontal|vertical".
إليك مثال على ذلك:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" > </appwidget-provider>
لمزيد من المعلومات عن أدوات الشاشة الرئيسية، يُرجى الاطّلاع على مستندات أدوات التطبيقات.
إطار عمل الرسوم المتحركة
- فئة ViewPropertyAnimator الجديدة
- توفّر فئة
ViewPropertyAnimator
الجديدة طريقة سهلة للمطوّرين لتحريك سمات محدّدة على عناصرView
. تعمل الفئة على التشغيل الآلي للخصائص وتحسين الرسوم المتحركة ضمنها وتسهّل إدارة صور متحركة متزامنة متعددة في عنصرView
.يسهل استخدام
ViewPropertyAnimator
. لتحريك سماتView
، عليك طلبanimate()
لإنشاء كائنViewPropertyAnimator
بدلاً منView
. استخدِم الطرق المتوفّرة علىViewPropertyAnimator
لتحديد السمة التي تريد تحريكها وكيفية تحريكها. على سبيل المثال، لتلاشيView
إلى شفاف، يمكنك استدعاءalpha(0);
. يعالج الكائنViewPropertyAnimator
تفاصيل ضبط فئةAnimator
الأساسية وتشغيلها، ثم عرض الرسوم المتحركة.
- توفّر فئة
- لون خلفية الصورة المتحركة
- تتيح لك الطريقتان
getBackgroundColor()
وsetBackgroundColor(int)
الجديدتان الحصول على/ضبط لون الخلفية خلف الصور المتحركة، وذلك في اللقطات المتحركة في النوافذ فقط. في الوقت الحالي، يجب أن تكون الخلفية سوداء، مع أي مستوى ألفا مطلوب.
- تتيح لك الطريقتان
- الحصول على كسر متحرك من
ViewAnimator
- تتيح لك طريقة
getAnimatedFraction()
الجديدة الحصول على كسر الحركة الحالية منValueAnimator
، وهو الجزء المنقضي/الإضافي المستخدَم في آخر تعديل للإطار.
- تتيح لك طريقة
إطار عمل واجهة المستخدم
- العرض الإجباري للطبقة
- تتيح طريقة
buildLayer()
الجديدة للتطبيق فرض إنشاء طبقة العرض وعرض العرض فيها على الفور. على سبيل المثال، يمكن لتطبيق استخدام هذه الطريقة لتحويل "طريقة العرض" إلى طبقته قبل بدء الرسوم المتحركة. إذا كان العرض معقدًا، فإن عرضه في الطبقة قبل بدء الرسوم المتحركة سيتجنب تخطي الإطارات.
- تتيح طريقة
- بُعد الكاميرا
- يمكن أن تستخدم التطبيقات طريقة جديدة
"
setCameraDistance(float)
" لضبط المسافة من الكاميرا إلى "العرض". يمنح هذا التطبيقات تحكمًا محسّنًا في التحولات الثلاثية الأبعاد للعرض، مثل عمليات التدوير.
- يمكن أن تستخدم التطبيقات طريقة جديدة
"
- الحصول على عرض التقويم من "أداة اختيار التاريخ"
- تتيح لك طريقة
getCalendarView()
الجديدة الحصول علىCalendarView
من مثيلDatePicker
.
- تتيح لك طريقة
- تلقّي طلبات معاودة الاتصال عند فصل المشاهَدات
- تتيح لك ميزة
View.OnAttachStateChangeListener
الجديدة تلقّي طلبات معاودة الاتصال عند إرفاق عرض أو فصله عن نافذته. يمكنك استخدامaddOnAttachStateChangeListener()
لإضافة مستمع وaddOnAttachStateChangeListener()
لإزالته.
- تتيح لك ميزة
- أداة معالجة شريط التنقُّل في Fragment، توقيع onInflate() الجديد
- توفّر طريقة جديدة، وهي
setOnBreadCrumbClickListener()
، عنصر جذب للسماح للتطبيقات باعتراض النقرات على أجزاء مسار التنقّل واتّخاذ أي إجراء مطلوب قبل الانتقال إلى إدخال أو الجزء الذي تم النقر عليه. - في الصف
Fragment
، تم إيقافonInflate(attrs, savedInstanceState)
نهائيًا. يُرجى استخدامonInflate(activity, attrs, savedInstanceState)
بدلاً منها.
- توفّر طريقة جديدة، وهي
- عرض نتيجة البحث في علامة تبويب جديدة
- يتيح لك مفتاح بيانات
EXTRA_NEW_SEARCH
لأهدافACTION_WEB_SEARCH
إمكانية فتح عملية بحث في علامة تبويب متصفّح جديدة بدلاً من علامة تبويب حالية.
- يتيح لك مفتاح بيانات
- مؤشر النص القابل للرسم
- يمكنك الآن تحديد عنصر قابل للرسم لاستخدامه كمؤشر نص باستخدام سمة المورد الجديدة
textCursorDrawable
.
- يمكنك الآن تحديد عنصر قابل للرسم لاستخدامه كمؤشر نص باستخدام سمة المورد الجديدة
- إعداد حساب الطفل المعروض في طرق العرض عن بُعد
- تتوفر طريقة سهلة جديدة، وهي
setDisplayedChild(viewId, childIndex)
، فيRemoteViews
فئة فرعية، للسماح لك بضبط الإعداد الفرعي المعروض فيViewAnimator
وAdapterViewAnimator
فئة فرعية، مثلAdapterViewFlipper
وStackView
وViewFlipper
وViewSwitcher
.
- تتوفر طريقة سهلة جديدة، وهي
- مفاتيح عامة للوحات الألعاب وأجهزة الإدخال الأخرى
- يضيف تطبيق
KeyEvent
مجموعة من رموز المفاتيح العامة لتلائم أزرار لوحة الألعاب. يضيف الصف أيضًا السمةisGamepadButton(int)
والعديد من الطرق المساعدة الأخرى للتعامل مع رموز المفاتيح.
- يضيف تطبيق
الرسومات
- أدوات مساعدة في إدارة الصور النقطية
- يسمح
setHasAlpha(boolean)
للتطبيق بالإشارة إلى أنّ جميع وحدات البكسل في الصورة النقطية معروفة بأنّها معتمة (خطأ) أو أنّ بعض وحدات البكسل قد تحتوي على قيم ألفا غير معتمة (صحيح). ملاحظة، بالنسبة إلى بعض الإعدادات (مثل RGB_565)، يتم تجاهل هذا الطلب، نظرًا لأنه لا يتوافق مع قيم ألفا لكل بكسل. ويُقصد بذلك تلميحًا للرسم، حيث يمكن أن تأخذ الصورة النقطية المعروف أنها معتمة في بعض الحالات حالة رسم أسرع من الصورة التي قد تحتوي على قيم ألفا غير معتمة لكل بكسل. - يحصل
getByteCount()
على حجم الصورة النقطية بالبايت. - يتيح
getGenerationId()
للتطبيق معرفة ما إذا كان قد تم تعديل الصورة النقطية، مثل التخزين المؤقت. - يحدِّد
sameAs(android.graphics.Bitmap)
ما إذا كانت صورة نقطية معيّنة تختلف عن الصورة النقطية الحالية من حيث الأبعاد أو الإعدادات أو بيانات وحدة البكسل.
- يسمح
- ضبط إعدادات الموقع الجغرافي والتدوير للكاميرا
- يضيف
Camera
طريقتين جديدتينrotate()
وsetLocation()
للتحكم في موقع الكاميرا، لإجراء عمليات تحويل ثلاثية الأبعاد.
- يضيف
الشبكة
- قفل شبكة Wi-Fi عالي الأداء
- يتيح قفل Wi-Fi الجديد العالي الأداء للتطبيقات الحفاظ على
اتصالات Wi-Fi عالية الأداء حتى عندما تكون شاشة الجهاز مغلقة.
يمكن للتطبيقات التي تبث الموسيقى أو الفيديو أو الصوت لفترات طويلة الحصول على
قفل Wi-Fi عالي الأداء لضمان أداء البث حتى عندما تكون الشاشة
مطفأة. ونظرًا لاستخدام هذه الميزة لطاقة أكبر، من المفترض أن تحصل التطبيقات على
اتصال Wi-Fi عالي الأداء عند الحاجة إلى اتصال نشط
على المدى الطويل.
لإنشاء قفل عالي الأداء، عليك ضبط
WIFI_MODE_FULL_HIGH_PERF
على أنّه وضع القفل في المكالمة إلىcreateWifiLock()
.
- يتيح قفل Wi-Fi الجديد العالي الأداء للتطبيقات الحفاظ على
اتصالات Wi-Fi عالية الأداء حتى عندما تكون شاشة الجهاز مغلقة.
يمكن للتطبيقات التي تبث الموسيقى أو الفيديو أو الصوت لفترات طويلة الحصول على
قفل Wi-Fi عالي الأداء لضمان أداء البث حتى عندما تكون الشاشة
مطفأة. ونظرًا لاستخدام هذه الميزة لطاقة أكبر، من المفترض أن تحصل التطبيقات على
اتصال Wi-Fi عالي الأداء عند الحاجة إلى اتصال نشط
على المدى الطويل.
- المزيد من إحصاءات حركة المرور
- يمكن للتطبيقات الآن الوصول إلى الإحصاءات حول المزيد من أنواع استخدام الشبكة
باستخدام طرق جديدة في
TrafficStats
. يمكن للتطبيقات استخدام الطرق للحصول على إحصاءات UDP وعدد الحزم ونقل/تلقي بايت حمولات البيانات عبر بروتوكول التحكم بالنقل والشرائح لمعرّف مستخدم معين.
- يمكن للتطبيقات الآن الوصول إلى الإحصاءات حول المزيد من أنواع استخدام الشبكة
باستخدام طرق جديدة في
- اسم مستخدم مصادقة SIP
- يمكن للتطبيقات الآن الحصول على اسم مستخدم مصادقة SIP وضبطه لملف شخصي
باستخدام
الطريقتين الجديدتين
getAuthUserName()
وsetAuthUserName()
.
- يمكن للتطبيقات الآن الحصول على اسم مستخدم مصادقة SIP وضبطه لملف شخصي
باستخدام
الطريقتين الجديدتين
تطبيق إدارة التنزيل
- معالجة عمليات التنزيل المكتملة
- يمكن للتطبيقات الآن بدء عمليات تنزيل لا تُعلم المستخدمين إلا عند الإكمال. لبدء هذا النوع من التنزيل، تمرر التطبيقات
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
في الطريقةsetNotificationVisibility()
لكائن الطلب. - تتيح طريقة جديدة
addCompletedDownload()
للتطبيق إضافة ملف إلى قاعدة بيانات "عمليات التنزيل"، حتى يتمكن تطبيق "عمليات التنزيل" من إدارته.
- يمكن للتطبيقات الآن بدء عمليات تنزيل لا تُعلم المستخدمين إلا عند الإكمال. لبدء هذا النوع من التنزيل، تمرر التطبيقات
- عرض عمليات التنزيل مرتّبة حسب الحجم
- يمكن للتطبيقات تشغيل تطبيق "عمليات التنزيل" في وضع الترتيب حسب الحجم من خلال إضافة السمة
INTENT_EXTRAS_SORT_BY_SIZE
الإضافية الجديدة إلى هدفACTION_VIEW_DOWNLOADS
.
- يمكن للتطبيقات تشغيل تطبيق "عمليات التنزيل" في وضع الترتيب حسب الحجم من خلال إضافة السمة
إطار عمل أداة IME
- الحصول على مفتاح القيمة الإضافية لطريقة الإدخال
- تضيف
InputMethodSubtype
الطريقةcontainsExtraValueKey()
للتحقق مما إذا كان يتم تخزين سلسلة ExtraValue للنوع الفرعي والطريقةgetExtraValueOf()
لاستخراج قيمة مفتاح محدّدة من خريطة تجزئة ExtraValue.
- تضيف
الوسائط
- تنسيقات جديدة لبثّ المحتوى الصوتي
- يتيح إطار عمل الوسائط إمكانية استخدام محتوى ADTS AAC الأوَّلي للحصول على صوت بث محسَّن، ويتوافق أيضًا مع صوت FLAC للحصول على محتوى صوتي مضغوط بأعلى جودة (بدون فقدان بيانات). راجِع مستند تنسيقات الوسائط المتوافقة للحصول على مزيد من المعلومات.
يمكنك تشغيل عناصر التحكم في التطبيقات المتوقفة
بدءًا من الإصدار 3.1 من نظام التشغيل Android، يتتبّع مدير حِزم النظام التطبيقات التي تكون في حالة الإيقاف ويوفّر وسيلة للتحكم في تشغيلها من خلال العمليات التي تتم في الخلفية والتطبيقات الأخرى.
لاحظ أن حالة إيقاف التطبيق ليست هي نفسها حالة "النشاط" المتوقفة. يدير النظام هاتين الحالتَين المتوقفتَين بشكل منفصل.
يحدد النظام الأساسي علامتَي نيّة جديدتَين تتيحان للمرسِل تحديد ما إذا كان يجب السماح لـ Intent بتفعيل المكوّنات في التطبيق المتوقّف.
FLAG_INCLUDE_STOPPED_PACKAGES
: أدرِج فلاتر الأهداف للتطبيقات التي تم إيقافها في قائمة الأهداف المحتمَلة التي يجب حلّها.FLAG_EXCLUDE_STOPPED_PACKAGES
— استبعاد فلاتر الأهداف للتطبيقات التي تم إيقافها من قائمة الأهداف المحتملة.
في حال عدم تحديد أي من هاتين العلامتين أو كليهما في هدف، يكون السلوك التلقائي هو تضمين فلاتر التطبيقات المتوقفة في قائمة الأهداف المحتملة.
يُرجى العِلم أنّ النظام يضيف السمة FLAG_EXCLUDE_STOPPED_PACKAGES
إلى جميع أغراض البث. ويتم ذلك لمنع عمليات البث من الخدمات التي تعمل في الخلفية من
تشغيل عناصر من التطبيقات المتوقفة عن غير قصد أو بدون قصد.
يمكن لخدمة أو تطبيق في الخلفية إلغاء هذا السلوك من خلال إضافة
علامة FLAG_INCLUDE_STOPPED_PACKAGES
إلى نية البث
التي يجب السماح لها بتفعيل التطبيقات المتوقفة.
تكون التطبيقات في حالة توقف عند تثبيتها لأول مرة ولكن لم يتم تشغيلها بعد، وعندما يوقفها المستخدم يدويًا (في قسم "إدارة التطبيقات").
إشعار ببدء تشغيل التطبيق وترقيته لأول مرة
تضيف المنصة إشعارًا محسّنًا عند التشغيل لأول مرة وترقيات من خلال إجراءين جديدين مستندين إلى الغرض:
ACTION_PACKAGE_FIRST_LAUNCH
— يتم إرساله إلى حزمة أداة تثبيت التطبيق عند تشغيل هذا التطبيق لأول مرة (أي في المرة الأولى التي يتم فيها نقله خارج حالة الإيقاف). تحتوي البيانات على اسم الحزمة.ACTION_MY_PACKAGE_REPLACED
— لإرسال إشعار إلى تطبيق بأنه قد تم تحديثه مع تثبيت إصدار جديد بدلاً من إصدار حالي يتم إرسال هذه المعلومات فقط إلى التطبيق الذي تم استبداله. لا تحتوي على أي بيانات إضافية. لاستلامه، عرّف عن فلتر الأهداف لهذا الإجراء. يمكنك استخدام الغرض لتشغيل التعليمة البرمجية التي تساعد في إعادة تطبيقك إلى حالة التشغيل الصحيحة بعد الترقية.يتم إرسال هذا الغرض إلى التطبيق مباشرةً، ولكن فقط إذا تمت ترقية التطبيق أثناء تشغيله (ليس في حالة إيقافه).
برامج الخدمات الأساسية
- ذاكرة التخزين المؤقت للتطبيقات الأقل استخدامًا
- تتيح الفئة
LruCache
الجديدة لتطبيقاتك الاستفادة من التخزين المؤقت الفعّال. ويمكن للتطبيقات استخدام الفئة لتقليل الوقت المستغرَق في احتساب البيانات أو تنزيلها من الشبكة، مع الحفاظ على مساحة معقولة في الذاكرة للبيانات المخزّنة مؤقتًا.LruCache
وهي ذاكرة تخزين مؤقت تحتفظ بإشارات قوية لعدد محدود من القيم. في كل مرة يتم فيها الوصول إلى قيمة، يتم نقلها إلى رأس قائمة الانتظار. عند إضافة قيمة إلى ذاكرة التخزين المؤقت الكاملة، يتم التخلص من القيمة في نهاية قائمة الانتظار وقد تصبح مؤهلة لتجميع البيانات غير المرغوب فيها.
- تتيح الفئة
- واصف الملف كـ
int
- يمكنك الآن الحصول على واصف الملف الأصلي int لـ
ParcelFileDescriptor
باستخدام إحدى الطريقتين الجديدتينgetFd()
أوdetachFd()
.
- يمكنك الآن الحصول على واصف الملف الأصلي int لـ
مجموعة أدوات الويب
- ملفات تعريف الارتباط لنظام الملفات
- أصبح
CookieManager
يتيح الآن استخدام ملفات تعريف الارتباط التي تستخدم نظام معرِّف الموارد المنتظم (URI)file:
. يمكنك استخدامsetAcceptFileSchemeCookies()
لتفعيل/إيقاف دعم ملفات تعريف ارتباط نظام الملفات، قبل إنشاء مثيلWebView
أوCookieManager
. في مثيلCookieManager
، يمكنك التحقق مما إذا كانت ملفات تعريف الارتباط لنظام الملفات مفعّلة أم لا من خلال استدعاءallowFileSchemeCookies()
.
- أصبح
- إشعار بطلب تسجيل الدخول
- لدعم ميزات تسجيل الدخول التلقائي في المتصفِّح التي تم تقديمها في نظام التشغيل Android 3.0، تُعلِم
الطريقة
الجديدة
onReceivedLoginRequest()
التطبيق المضيف بمعالجة طلب تسجيل الدخول التلقائي للمستخدم.
- لدعم ميزات تسجيل الدخول التلقائي في المتصفِّح التي تم تقديمها في نظام التشغيل Android 3.0، تُعلِم
الطريقة
الجديدة
- الفئات والواجهات التي تمت إزالتها
- تمت إزالة العديد من الفئات والواجهات من واجهة برمجة التطبيقات العامة، بعد أن كانت في حالة إيقافها سابقًا. يُرجى الاطّلاع على تقرير الاختلافات في واجهة برمجة التطبيقات للحصول على مزيد من المعلومات.
المتصفح
يضيف تطبيق المتصفح الميزات التالية لدعم تطبيقات الويب:
- إتاحة التشغيل المضمّن للفيديو المضمّن في علامة
<video>
HTML5. يتم تشغيل الفيديو من خلال تسريع الأجهزة متى أمكن. - طبقة دعم العناصر ذات الموضع الثابت لجميع المواقع الإلكترونية (الأجهزة الجوّالة وأجهزة الكمبيوتر المكتبي).
ثوابت الميزات الجديدة
يضيف النظام الأساسي ثوابت جديدة لميزات الأجهزة يمكن للمطوّرين الإفصاح عنها
في بيانات التطبيقات، لإعلام الكيانات الخارجية مثل Google
Play بمتطلبات التطبيق المتعلقة بإمكانيات الأجهزة الجديدة المتوافقة
في هذا الإصدار من النظام الأساسي. يعلن المطوّرون عن هذه الثبات وغيرها من ثوابت الميزات في عناصر بيان <uses-feature>
.
android.hardware.usb.accessory
— يستخدم التطبيق واجهة برمجة تطبيقات USB للتواصل مع الأجهزة الخارجية المتصلة عبر USB والعمل كمضيفات.android.hardware.usb.host
— يستخدم التطبيق USB API للتواصل مع الأجهزة الخارجية المتصلة عبر USB والعمل كأجهزة.
يُجري Google Play فلترة للتطبيقات بناءً على الميزات الموضّحة في عناصر بيان <uses-feature>
. لمزيد من المعلومات حول
الإعلان عن الميزات في بيان التطبيق، اقرأ فلاتر
Google Play.
تقرير الاختلافات في واجهة برمجة التطبيقات
للحصول على عرض تفصيلي لجميع التغييرات في واجهة برمجة التطبيقات في الإصدار Android 3.1 (المستوى 12 من واجهة برمجة التطبيقات)، يمكنك الاطّلاع على تقرير الاختلافات في واجهة برمجة التطبيقات.
مستوى واجهة برمجة التطبيقات
يقدم نظام Android 3.1 إصدارًا محدثًا من واجهة برمجة التطبيقات لإطار العمل. ويتم تخصيص معرّف عدد صحيح 12 لواجهة برمجة التطبيقات Android 3.1 ويتم تخزينه في النظام نفسه. ويتيح هذا المعرّف، المسمى "مستوى واجهة برمجة التطبيقات"، للنظام تحديد ما إذا كان التطبيق متوافقًا مع النظام بشكل صحيح قبل تثبيت التطبيق.
لاستخدام واجهات برمجة التطبيقات التي تم تقديمها في نظام التشغيل Android 3.1 في تطبيقك،
يجب تجميع التطبيق في مكتبة Android التي تتوفر في
النظام الأساسي لحزمة تطوير البرامج (SDK) لنظام التشغيل Android 3.1. بناءً على احتياجاتك، قد تحتاج أيضًا إلى إضافة السمة android:minSdkVersion="12"
إلى العنصر <uses-sdk>
في بيان التطبيق.
لمزيد من المعلومات، يُرجى الاطّلاع على القسم ما هو مستوى واجهة برمجة التطبيقات؟