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

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

بالنسبة إلى المطوّرين، يتوفّر نظام Android 3.1 الأساسي (HONEYCOMB_MR1) كمكوِّن قابل للتنزيل لحزمة تطوير البرامج (SDK) لنظام التشغيل Android. وتشتمل المنصة القابلة للتنزيل على مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من مظاهر المحاكيات وغير ذلك. لا يتضمن النظام الأساسي القابل للتنزيل أي مكتبات خارجية.

بالنسبة إلى المطورين، يتوفر نظام Android 3.1 الأساسي كمكون قابل للتنزيل لحزمة Android SDK. وتشتمل المنصة القابلة للتنزيل على مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من مظاهر المحاكيات وغير ذلك. لبدء تطوير التطبيقات أو اختبارها على الإصدار 3.1 من نظام التشغيل Android، استخدِم "مدير تطوير البرامج (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، يمكنك الاطّلاع على اختبار AB و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.

لكل جهاز إدخال رقم تعريف فريد يعيّنه النظام وقد يوفّر أيضًا مصادر متعددة. عندما يوفر أي جهاز مصادر متعددة، يمكن لأكثر من مصدر أن يوفر بيانات المحور باستخدام نفس المحور. على سبيل المثال، إنّ حدث اللمس القادم من مصدر اللمس يستخدم المحور X لبيانات موضع الشاشة، بينما سيستخدم حدث ذراع التحكّم القادم من مصدر ذراع التحكّم المحور X لموضع العصا بدلاً من ذلك. لهذا السبب، من المهم للتطبيقات تفسير قيم المحور وفقًا للمصدر الذي نشأت منه. عند التعامل مع حدث متحرّك، يجب أن تستخدم التطبيقات طرقًا ضمن الفئة InputDevice لتحديد المحاور التي يتيحها الجهاز أو المصدر. على وجه التحديد، يمكن للتطبيقات استخدام getMotionRanges() للبحث عن جميع محاور الجهاز أو جميع محاور مصدر معيّن للجهاز. في كلتا الحالتين، تحدّد معلومات النطاق الخاصة بالمحاور المعروضة في الكائن InputDevice.MotionRange المصدر لكل قيمة من قيم المحور.

أخيرًا، بما أنّ أحداث الحركة من ذراع التحكّم ولوحات الألعاب والفأرة وكرات التعقب ليست أحداث لمس، تضيف المنصة طريقة جديدة لمعاودة الاتصال لتمريرها إلى View كأحداث متحركة "عامة". وعلى وجه التحديد، تُبلِغ عن أحداث الحركة التي لا تعمل باللمس إلى View من خلال مكالمة إلى onGenericMotionEvent() بدلاً من onTouchEvent().

توزّع المنصة أحداث الحركة العامة بشكل مختلف حسب فئة مصدر الحدث. تنتقل فعاليات SOURCE_CLASS_POINTER إلى View أسفل المؤشر، تمامًا مثل آلية عمل أحداث اللمس. يتم توجيه جميع المستخدمين الآخرين إلى View محل التركيز حاليًا. على سبيل المثال، يعني ذلك أنّه يجب التركيز على View لتلقّي أحداث ذراع التحكّم. وإذا لزم الأمر، يمكن للتطبيقات معالجة هذه الأحداث على مستوى "النشاط" أو "مربّع الحوار" من خلال تطبيق علامة onGenericMotionEvent() فيهما بدلاً من ذلك.

للاطّلاع على نموذج تطبيق يستخدم أحداث حركة ذراع التحكّم، راجِع GameControllerInput وGameView.

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

يعرض Android 3.1 واجهة برمجة التطبيقات لحزمة بروتوكول النقل في الوقت الفعلي (RTP) المدمجة، والتي يمكن للتطبيقات استخدامها لإدارة بث البيانات عند الطلب أو البيانات التفاعلية. وعلى وجه الخصوص، يمكن للتطبيقات التي توفر بروتوكول الصوت عبر بروتوكول الصوت على الإنترنت (VoIP) وميزة "الضغط إلى التحدث" و"عقد المؤتمرات" و"بث الصوت" استخدام واجهة برمجة التطبيقات لبدء الجلسات ونقل أو استقبال عمليات بث البيانات عبر أي شبكة متاحة.

تتوفّر واجهة برمجة التطبيقات RTP API في حزمة "android.net.rtp". وتشمل الصفوف ما يلي:

  • RtpStream، وهي الفئة الأساسية لأحداث البث التي ترسل وتستلم حِزم الشبكة مع حمولات الوسائط عبر بروتوكول RTP.
  • AudioStream، وهي فئة فرعية من RtpStream تنقل أحمال الصوت عبر بروتوكول RTP.
  • AudioGroup، وهو مركز محلي لإدارة الصوت لإدارة ومزج مكبّرات الصوت والميكروفون وAudioStream في الجهاز.
  • AudioCodec، التي تحتوي على مجموعة من برامج الترميز التي تحدّدها لـ AudioStream.

لإتاحة عقد الاجتماعات الصوتية واستخدامات مشابهة، يُنشئ أحد التطبيقات مثيلاً لفئتَين كنقاط نهاية للبث:

  • AudioStream يحدد نقطة نهاية بعيدة ويتكون من ربط الشبكة وAudioCodec تم إعداده.
  • AudioGroup تمثل نقطة النهاية المحلية لدالة AudioStream واحدة أو أكثر. يمزج AudioGroup بين كل AudioStream ويتفاعل اختياريًا مع مكبر صوت الجهاز والميكروفون في الوقت نفسه.

وتتضمن أبسط الاستخدامات نقطة نهاية واحدة عن بُعد ونقطة نهاية محلية. بالنسبة إلى الاستخدامات الأكثر تعقيدًا، يُرجى الاطّلاع على القيود الموضّحة في AudioGroup.

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

الرسومات

  • الأدوات المساعدة في إدارة الصور النقطية
    • يتيح setHasAlpha(boolean) للتطبيق الإشارة إلى أن جميع وحدات البكسل في الصورة النقطية معروفة بأنها معتمة (خطأ) أو أن بعض وحدات البكسل قد تحتوي على قيم ألفا غير معتمة (true). لاحظ أنه في بعض التهيئات (مثل 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) وعدد الحزم ووحدات بايت نقل/استلام حمولة البيانات في بروتوكول التحكم بالنقل (TCP) والشرائح لمعرّف فريد محدد.
  • اسم مستخدم مصادقة SIP
    • يمكن للتطبيقات الآن الحصول على اسم مستخدم مصادقة SIP وإعداده لملف شخصي باستخدام الطريقتين الجديدتين getAuthUserName() وsetAuthUserName().

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

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

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

  • الحصول على مفتاح القيمة الإضافية لطريقة الإدخال
    • تضيف السمة InputMethodSubtype الطريقة containsExtraValueKey() للتحقق مما إذا كان يتم تخزين سلسلة ExtraValue للنوع الفرعي والطريقة getExtraValueOf() لاستخراج قيمة أساسية معيّنة من خريطة تجزئة ExtraValue.

الوسائط

  • تنسيقات المحتوى الصوتي الجديدة
    • يتيح إطار عمل الوسائط إمكانية استخدام محتوى ADTS AAC الأولي، ولتحسين بث الصوت، بالإضافة إلى إمكانية تشغيل صوت FLAC للحصول على المحتوى الصوتي المضغوط بأعلى جودة (بدون فقدان البيانات). راجِع مستند تنسيقات الوسائط المتوافقة للحصول على مزيد من المعلومات.

عناصر التحكم في التشغيل على التطبيقات المتوقفة

بدءًا من نظام التشغيل Android 3.1، يتتبع مدير حزم النظام التطبيقات التي تكون في حالة متوقفة ويوفر وسيلة للتحكم في تشغيلها من العمليات التي تتم في الخلفية والتطبيقات الأخرى.

لاحظ أن حالة إيقاف التطبيق ليست هي نفسها حالة توقف النشاط. يدير النظام هاتين الحالتين المتوقفتين بشكل منفصل.

ويحدِّد النظام الأساسي علامتَين جديدتَين للأهداف تتيحان للمرسِل تحديد ما إذا كان يجب السماح لـ 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
    • يمكنك الآن الحصول على عدد صحيح لواصف الملف الأصلي لـ 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 إصدارًا محدثًا من واجهة برمجة التطبيقات لإطار العمل. يتم تعيين معرّف عدد صحيح لواجهة برمجة التطبيقات Android 3.1 وهو 12، ويتم تخزينه في النظام نفسه. هذا المعرف، الذي يُطلق عليه "مستوى واجهة برمجة التطبيقات"، يسمح للنظام بتحديد ما إذا كان التطبيق متوافقًا مع النظام أم لا، وذلك قبل تثبيته.

لاستخدام واجهات برمجة التطبيقات التي تم تقديمها في Android 3.1 ضمن تطبيقك، عليك تجميع التطبيق مقابل مكتبة Android المتوفرة في النظام الأساسي Android 3.1 SDK. بناءً على احتياجاتك، قد تحتاج أيضًا إلى إضافة السمة android:minSdkVersion="12" إلى العنصر <uses-sdk> في بيان التطبيق.

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