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

مستوى واجهة برمجة التطبيقات: 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 مصادر أجهزة الإدخال الجديدة التالية:

لوصف أحداث الحركة من هذه المصادر الجديدة، فضلاً عن أحداث الفئران وكرات التعقب، أصبح بإمكان النظام الأساسي الآن تحديد رموز المحاور على 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)" لضبط المسافة من الكاميرا إلى "العرض". يمنح هذا التطبيقات تحكمًا محسّنًا في التحولات الثلاثية الأبعاد للعرض، مثل عمليات التدوير.
  • الحصول على عرض التقويم من "أداة اختيار التاريخ"
  • تلقّي طلبات معاودة الاتصال عند فصل المشاهَدات
  • أداة معالجة شريط التنقُّل في Fragment، توقيع onInflate() الجديد
  • عرض نتيجة البحث في علامة تبويب جديدة
    • يتيح لك مفتاح بيانات EXTRA_NEW_SEARCH لأهداف ACTION_WEB_SEARCH إمكانية فتح عملية بحث في علامة تبويب متصفّح جديدة بدلاً من علامة تبويب حالية.
  • مؤشر النص القابل للرسم
    • يمكنك الآن تحديد عنصر قابل للرسم لاستخدامه كمؤشر نص باستخدام سمة المورد الجديدة textCursorDrawable.
  • إعداد حساب الطفل المعروض في طرق العرض عن بُعد
  • مفاتيح عامة للوحات الألعاب وأجهزة الإدخال الأخرى
    • يضيف تطبيق 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().

  • المزيد من إحصاءات حركة المرور
    • يمكن للتطبيقات الآن الوصول إلى الإحصاءات حول المزيد من أنواع استخدام الشبكة باستخدام طرق جديدة في TrafficStats. يمكن للتطبيقات استخدام الطرق للحصول على إحصاءات UDP وعدد الحزم ونقل/تلقي بايت حمولات البيانات عبر بروتوكول التحكم بالنقل والشرائح لمعرّف مستخدم معين.
  • اسم مستخدم مصادقة SIP
    • يمكن للتطبيقات الآن الحصول على اسم مستخدم مصادقة SIP وضبطه لملف شخصي باستخدام الطريقتين الجديدتين getAuthUserName() وsetAuthUserName().

تطبيق إدارة التنزيل

  • معالجة عمليات التنزيل المكتملة
    • يمكن للتطبيقات الآن بدء عمليات تنزيل لا تُعلم المستخدمين إلا عند الإكمال. لبدء هذا النوع من التنزيل، تمرر التطبيقات VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION في الطريقة setNotificationVisibility() لكائن الطلب.
    • تتيح طريقة جديدة addCompletedDownload() للتطبيق إضافة ملف إلى قاعدة بيانات "عمليات التنزيل"، حتى يتمكن تطبيق "عمليات التنزيل" من إدارته.
  • عرض عمليات التنزيل مرتّبة حسب الحجم
    • يمكن للتطبيقات تشغيل تطبيق "عمليات التنزيل" في وضع الترتيب حسب الحجم من خلال إضافة السمة INTENT_EXTRAS_SORT_BY_SIZE الإضافية الجديدة إلى هدف ACTION_VIEW_DOWNLOADS.

إطار عمل أداة IME

  • الحصول على مفتاح القيمة الإضافية لطريقة الإدخال

الوسائط

  • تنسيقات جديدة لبثّ المحتوى الصوتي
    • يتيح إطار عمل الوسائط إمكانية استخدام محتوى 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().

مجموعة أدوات الويب

  • ملفات تعريف الارتباط لنظام الملفات
    • أصبح CookieManager يتيح الآن استخدام ملفات تعريف الارتباط التي تستخدم نظام معرِّف الموارد المنتظم (URI) file:. يمكنك استخدام setAcceptFileSchemeCookies() لتفعيل/إيقاف دعم ملفات تعريف ارتباط نظام الملفات، قبل إنشاء مثيل WebView أو CookieManager. في مثيل CookieManager، يمكنك التحقق مما إذا كانت ملفات تعريف الارتباط لنظام الملفات مفعّلة أم لا من خلال استدعاء allowFileSchemeCookies().
  • إشعار بطلب تسجيل الدخول
    • لدعم ميزات تسجيل الدخول التلقائي في المتصفِّح التي تم تقديمها في نظام التشغيل Android 3.0، تُعلِم الطريقة الجديدة onReceivedLoginRequest() التطبيق المضيف بمعالجة طلب تسجيل الدخول التلقائي للمستخدم.
  • الفئات والواجهات التي تمت إزالتها

المتصفح

يضيف تطبيق المتصفح الميزات التالية لدعم تطبيقات الويب:

  • إتاحة التشغيل المضمّن للفيديو المضمّن في علامة <video> HTML5. يتم تشغيل الفيديو من خلال تسريع الأجهزة متى أمكن.
  • طبقة دعم العناصر ذات الموضع الثابت لجميع المواقع الإلكترونية (الأجهزة الجوّالة وأجهزة الكمبيوتر المكتبي).

ثوابت الميزات الجديدة

يضيف النظام الأساسي ثوابت جديدة لميزات الأجهزة يمكن للمطوّرين الإفصاح عنها في بيانات التطبيقات، لإعلام الكيانات الخارجية مثل Google Play بمتطلبات التطبيق المتعلقة بإمكانيات الأجهزة الجديدة المتوافقة في هذا الإصدار من النظام الأساسي. يعلن المطوّرون عن هذه الثبات وغيرها من ثوابت الميزات في عناصر بيان <uses-feature>.

يُجري 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> في بيان التطبيق.

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