مستوى واجهة برمجة التطبيقات: 11
بالنسبة للمطورين، يوفر نظام Android 3.0 الأساسي
(HONEYCOMB
) متاح كملف قابل للتنزيل
لحزمة Android SDK. تتضمّن المنصة القابلة للتنزيل مكتبة Android وملف System
image، بالإضافة إلى مجموعة من مظاهر المحاكي وغير ذلك. لا تتضمن المنصة القابلة للتنزيل أي تطبيقات خارجية
المكتبات.
يتوفّر نظام Android 3.0 الأساسي للمطوّرين كأحد المكونات التي يمكن تنزيلها لحزمة تطوير البرامج (SDK) لنظام التشغيل Android. تتضمّن المنصة القابلة للتنزيل مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من أشكال المحاكي وغيرها. لبدء تطوير التطبيقات أو اختبارها وفقًا للإصدار Android 3.0، عليك استخدِم "مدير حزمة تطوير البرامج (SDK) لنظام التشغيل Android" لتنزيل النظام الأساسي في حزمة تطوير البرامج (SDK) الخاصة بك.
نظرة عامة على واجهة برمجة التطبيقات
تقدم الأقسام أدناه نظرة عامة فنية على الميزات الجديدة للمطورين في Android 3.0، بما في ذلك الميزات والتغييرات الجديدة في واجهة برمجة التطبيقات لإطار العمل منذ الإصدار السابق.
الأجزاء
الجزء هو مكون جديد في إطار العمل يسمح لك بفصل العناصر المميزة من
النشاط إلى وحدات مستقلة تحدد واجهة المستخدم ودورة الحياة الخاصة بها. لإنشاء قطعة، يجب توسيع فئة Fragment
وتنفيذ عدة طرق callback لدورة المعالجة
، مثل Activity
. يمكنك بعد ذلك دمج عدة
شرائح في نشاط واحد لإنشاء واجهة مستخدم متعددة الأقسام تدير كل شاشة
دورة حياتها ومدخلات المستخدم.
ويمكنك أيضًا استخدام جزء بدون توفير واجهة مستخدم، واستخدام الجزء بدلاً من ذلك كعامل للنشاط، مثل إدارة تقدم عملية تنزيل لا تحدث إلا أثناء النشاط قيد التشغيل.
علاوةً على ذلك:
- تكون الأجزاء مستقلة بذاتها ويمكنك إعادة استخدامها في أنشطة متعددة
- يمكنك إضافة أجزاء وإزالتها واستبدالها وتحريكها داخل النشاط.
- يمكنك إضافة أجزاء إلى حزمة خلفية يديرها النشاط، مع الحفاظ على حالة إلى الأجزاء أثناء تغييرها والسماح للمستخدم بالتنقل للخلف من خلال الولايات
- من خلال تقديم بتنسيقات بديلة، يمكنك مزج الأجزاء ومطابقتها استنادًا إلى على حجم الشاشة والاتجاه
- يمكن للأجزاء الوصول مباشرةً إلى نشاط الحاوية ويمكن أن تساهم في تضمين عناصر شريط الإجراءات الخاص بنشاطك (سنناقشه في ما يلي)
لإدارة الأجزاء في نشاطك، عليك استخدام واجهة برمجة التطبيقات FragmentManager
التي توفّر العديد من واجهات برمجة التطبيقات للتفاعل مع الأجزاء، مثل:
مثل العثور على أجزاء في النشاط وفصل الأجزاء عن المكدس الخلفي لاستعادة
الحالة السابقة.
لإجراء معاملة، مثل إضافة جزء أو إزالته، يجب إنشاء FragmentTransaction
. يمكنك بعد ذلك استدعاء طرق مثل add()
remove()
أو replace()
. بمجرد تطبيق كل
التغييرات التي تريد إجراؤها على العملية، يجب استدعاء commit()
ويطبّق النظام معاملة التجزئة على
النشاط.
لمزيد من المعلومات عن استخدام المقتطفات، اطّلِع على مستندات المقتطفات. تتوفّر أيضًا عدة عيّنات في تطبيق العروض التوضيحية لواجهات برمجة التطبيقات.
شريط الإجراءات
شريط الإجراءات هو بديل لشريط العنوان التقليدي في أعلى نافذة النشاط. يتضمّن شعار التطبيق في الزاوية اليمنى ويقدّم واجهة جديدة للعناصر في قائمة الخيارات. بالإضافة إلى ذلك، يتيح لك شريط الإجراءات:
- أضف عناصر القائمة مباشرةً في شريط الإجراءات - على هيئة "عناصر إجراءات".
في تعريف XML الخاص بعنصر قائمة الطعام، أدرِج السمة
android:showAsAction
مع القيمة"ifRoom"
. عندما تكون هناك مساحة كافية، مباشرةً في شريط الإجراءات. وبخلاف ذلك، يتم وضع العنصر في القائمة الكاملة، يظهرها رمز القائمة على الجانب الأيمن من شريط الإجراءات. - استبدال بند عمل بأداة (مثل مربع البحث)—إنشاء
"عرض الإجراء".
في تعريف XML لعنصر القائمة، أضِف سمة
android:actionViewLayout
مع مورد تنسيق أو سمةandroid:actionViewClass
مع اسم فئة أداة مصغّرة. (يجب أيضًا تحديد سمةandroid:showAsAction
لكي يظهر العنصر في شريط الإجراءات). إذا لم تكن هناك مساحة كافية في شريط الإجراءات وظهر العنصر في القائمة الكاملة، سيتصرف العنصر كعنصر قائمة عادي ولن يعرض التطبيق المصغّر. - إضافة إجراء إلى شعار التطبيق واستبداله بشعار مخصّص
يتم تلقائيًا منح شعار التطبيق رقم تعريف
android.R.id.home
، الذي يرسله النظام إلى دالة الاستدعاءonOptionsItemSelected()
لنشاطك عند لمسه. ما عليك سوى الردّ على هذا المعرّف في أسلوب callback لتنفيذ إجراء، مثل الانتقال إلى نشاط "المنزل" في تطبيقك.لاستبدال الرمز بشعار، حدِّد شعار تطبيقك في ملف البيان باستخدام سمة
android:logo
، ثم استخدِمsetDisplayUseLogoEnabled(true)
في نشاطك. - إضافة علامات مسار للتنقّل للخلف في الحزمة الخلفية من الأجزاء
- إضافة علامات تبويب أو قائمة منسدلة للتنقل عبر الأجزاء
- تخصيص شريط الإجراءات باستخدام المظاهر والخلفيات
يعد شريط الإجراءات معيارًا لجميع التطبيقات التي تستخدم المظهر المجسم الجديد، وهو
وهي قيمة عادية أيضًا عند ضبط android:minSdkVersion
أو android:targetSdkVersion
على "11"
.
لمزيد من المعلومات عن "شريط الإجراءات"، اطّلِع على مستندات شريط الإجراءات. تتوفّر أيضًا عدة عيّنات في تطبيق العروض التوضيحية لواجهات برمجة التطبيقات.
حافظة النظام
يمكن للتطبيقات الآن نسخ البيانات (باستثناء النصوص) ولصقها من وإلى ملف الحافظة على مستوى النظام. يمكن أن تكون البيانات المقتطعة نصًا عاديًا أو عنوانًا موحّدًا للموارد أو نية.
من خلال توفير وصول النظام إلى البيانات التي تريد أن ينسخها المستخدم، من خلال موفّر المحتوى، السماح للمستخدم بنسخ محتوى معقد (مثل صورة أو بنية بيانات) من تطبيقك ولصقه في تطبيق آخر يدعم هذا النوع من المحتوى.
لبدء استخدام الحافظة، يجب الحصول على كائن ClipboardManager
العام.
عبر الاتصال بـ getSystemService(CLIPBOARD_SERVICE)
.
لنسخ عنصر إلى الحافظة، عليك إنشاء عنصر ClipData
جديد يحتوي على عنصر ClipData.Item
واحد أو أكثر يصف كلٌّ منها عنصرًا واحدًا. لإنشاء عنصر ClipData
يحتوي على ClipData.Item
واحد فقط، يمكنك استخدام إحدى الطرق المساعِدة،
مثل newPlainText()
وnewUri()
وnewIntent()
، التي تُعرِض كلٌّ منها عنصرًا ClipData
محمَّلاً مسبقًا
ClipData.Item
الذي تقدّمه.
لإضافة ClipData
إلى الحافظة، عليك تمريره إلى setPrimaryClip()
لمثيل ClipboardManager
.
يمكنك بعد ذلك قراءة ملف من الحافظة (لصقه) من خلال استدعاء getPrimaryClip()
على ClipboardManager
. يمكن أن يؤدي التعامل مع بطاقة ClipData
التي تتلقاها
معقدة وتحتاج إلى التأكد من أنه يمكنك التعامل مع نوع البيانات في الحافظة
قبل محاولة لصقه.
تحتفظ الحافظة بجزء واحد فقط من البيانات المقتطعة (علامة ClipData
كائن) في الوقت نفسه، ولكن يمكن أن يحتوي ClipData
واحد على عدة ClipData.Item
s.
لمزيد من المعلومات، اطّلِع على مستندات النسخ واللصق. يمكنك أيضًا الاطّلاع على تنفيذ بسيط لعمليتي النسخ واللصق في ملف تطبيقات واجهة برمجة التطبيقات النموذجي ، وتنفيذ أكثر اكتمالاً في ملف "ملاحظات" النموذجي.
سحب وإفلات
تعمل واجهات برمجة التطبيقات الجديدة على تبسيط عمليات السحب والإفلات في واجهة مستخدم التطبيق. عملية السحب
هي نقل نوع من البيانات، التي يتم نقلها في ClipData
عنصر، من مكان إلى آخر. نقطة البداية والنهاية لعملية السحب هي View
، لذا فإنّ واجهات برمجة التطبيقات التي تعالج عمليات السحب والإفلات مباشرةً تكون
في فئة View
.
عملية السحب والإفلات لها دورة حياة محددة بعدة إجراءات سحب - كل منها
محدّدة من خلال كائن DragEvent
، مثل ACTION_DRAG_STARTED
وACTION_DRAG_ENTERED
ACTION_DROP
تريد كل طريقة عرض تريد المشاركة في سحب
العملية يمكنها الاستماع إلى هذه الإجراءات.
لبدء سحب المحتوى من نشاطك، يُرجى الاتصال بالرقم startDrag()
.
في View
، مع تقديم كائن ClipData
يمثل
البيانات المراد سحبها، View.DragShadowBuilder
لتسهيل "الظل"
يراها المستخدمون تحت أصابعهم أثناء السحب، وObject
يمكن مشاركته
معلومات حول كائن السحب مع طرق العرض التي قد تتلقى الكائن.
لقبول عنصر سحب في View
(تلقّي "الإفلات")، سجِّل طريقة العرض
باستخدام OnDragListener
من خلال استدعاء setOnDragListener()
. عندما يقع حدث السحب على العرض،
استدعاء النظام onDrag()
لـ OnDragListener
، الذي يتلقى DragEvent
يصف نوع إجراء السحب الذي حدث (مثل ACTION_DRAG_STARTED
وACTION_DRAG_ENTERED
ACTION_DROP
). أثناء السحب، يستدعي النظام onDrag()
بشكل متكرر للعرض أسفل السحب لعرض
دفق أحداث السحب. يمكن للعرض المستلِم الاستفسار عن نوع الحدث الذي تم إرساله إلى onDragEvent()
من خلال الاتصال برقم getAction()
على DragEvent
.
ملاحظة: على الرغم من أنّ حدث السحب قد يحمل عنصرًا ClipData
، إلا أنّ ذلك ليس مرتبطًا بحافظة النظام. سحب وإفلات
في حافظة النظام، لا ينبغي أبدًا أن تضع العملية البيانات التي تم سحبها في حافظة النظام.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات السحب والإفلات. يمكنك أيضًا أن ترى تنفيذ السحب والإفلات في تطبيق واجهات برمجة التطبيقات التجريبية وHoneycomb Gallery التطبيق.
أدوات التطبيقات
يتيح Android 3.0 استخدام العديد من فئات التطبيقات المصغّرة الجديدة لتوفير المزيد من تطبيقات التطبيقات المصغّرة التفاعلية على المستخدمين.
الشاشة الرئيسية، بما في ذلك: GridView
وListView
وStackView
وViewFlipper
وAdapterViewFlipper
والأهم من ذلك، يمكنك استخدام RemoteViewsService
الجديد لإنشاء تطبيق.
التطبيقات المصغّرة التي تحتوي على مجموعات، باستخدام التطبيقات المصغّرة مثل GridView
وListView
وStackView
، والمتوفّرة للبيانات عن بُعد،
من موفّر محتوى مثلاً
تتوافق الفئة AppWidgetProviderInfo
(المحدّدة في ملف XML باستخدام العنصر <appwidget-provider>
) أيضًا مع حقلَين جديدَين: autoAdvanceViewId
وpreviewImage
. يتيح لك حقل autoAdvanceViewId
تحديد معرّف العرض لمحاولة عرض التطبيق المصغّرة التي يجب أن يتقدّمها مضيف التطبيق المصغّر تلقائيًا. تشير رسالة الأشكال البيانية
يحدد حقل previewImage
معاينة لما
شكل التطبيق المصغّر ويتم عرضه للمستخدم من أداة اختيار التطبيقات المصغّرة. إذا لم يكن هذا الحقل
التطبيق، يتم استخدام رمز التطبيق المصغّر للمعاينة.
للمساعدة في إنشاء صورة معاينة لأداة تطبيقك المصغّرة (لتحديدها في حقل previewImage
)، يتضمّن محاكي Android
تطبيقًا يُسمى "معاينة التطبيقات المصغّرة". لإنشاء صورة معاينة، افتح هذا التطبيق واختَر
أداة تطبيق لتطبيقك واضبطها على النحو الذي تريد أن تظهر به صورة المعاينة، ثم احفظ
الصورة وضعها في موارد التطبيق القابلة للرسم.
يمكنك الاطّلاع على تنفيذ الميزات الجديدة للتطبيق المصغّر في تطبيق StackView المصغّر وأداة قائمة الطقس. التطبيقات.
إشعارات شريط الحالة
تم توسيع واجهات برمجة تطبيقات Notification
لإتاحة المزيد من حالات المحتوى الغني بالمحتوى.
من الأشرطة، بالإضافة إلى فئة Notification.Builder
الجديدة التي تتيح لك بسهولة
إنشاء كائنات Notification
تشمل الميزات الجديدة ما يلي:
- إتاحة رمز كبير في الإشعار باستخدام
setLargeIcon()
ويُستخدَم هذا الإذن عادةً لمنح التطبيقات الاجتماعية إذنًا بعرض صورة جهة الاتصال الخاصة بالمستخدم الذي أرسل الإشعار أو لمنح تطبيقات الوسائط إذنًا بعرض صورة مصغّرة للألبوم. - إتاحة التنسيقات المخصّصة في شريط الحالة باستخدام
setTicker()
- يمكنك استخدام تنسيقات مخصّصة للإشعارات تتضمّن أزرارًا مع
PendingIntent
، وذلك من أجل الحصول على المزيد من تطبيقات الإشعارات التفاعلية. على سبيل المثال، يمكن أن يتحكّم إعلام في تشغيل الموسيقى بدون بدء نشاط.
أدوات تحميل المحتوى
تسهِّل واجهات برمجة التطبيقات الجديدة للإطار تحميل البيانات بشكل غير متزامن باستخدام فئة Loader
. ويمكنك استخدامه مع مكونات واجهة المستخدم، مثل طرق العرض والاقتباسات لتحميل البيانات ديناميكيًا من سلاسل مهام العمل. تم تصميم الفئة الفرعية CursorLoader
خصيصًا لمساعدتك في إجراء ذلك للبيانات المستندة إلى
ContentProvider
.
ما عليك سوى تنفيذ واجهة LoaderCallbacks
لتلقّي عمليات الاستدعاء عند طلب أداة تحميل جديدة أو عند توفّر بيانات
ثم قم باستدعاء initLoader()
لإعداد
لنشاطك أو للجزء.
ولمزيد من المعلومات، اطّلِع على مستندات التحميلات. يمكنك أيضًا الاطّلاع على مثال على رمز برمجي باستخدام برامج تحميل في دالة LoaderCursor و نماذج LoaderThrottle.
واجهات برمجة التطبيقات لبروتوكول A2DP وسماعات الرأس عبر البلوتوث
يتضمّن Android الآن واجهات برمجة تطبيقات تتيح للتطبيقات التحقّق من حالة أجهزة الملف الشخصي لسماعة الرأس وA2DP في البلوتوث. على سبيل المثال، يمكن للتطبيقات تحديد وقت ربط سماعة رأس بلوتوث للاستماع إلى الموسيقى وإرسال إشعار إلى المستخدم حسب الاقتضاء. يمكن أن تتلقى الطلبات أيضًا عمليات البث لأوامر AT الخاصة بالموردين وإشعار المستخدم بحالة الاتصال الجهاز، مثلاً عند انخفاض طاقة بطارية الجهاز المتصل.
يمكنك بدء BluetoothProfile
المعنيّ من خلال استدعاء getProfileProxy()
باستخدام ثابت الملف الشخصي A2DP
أو HEADSET
وBluetoothProfile.ServiceListener
لتلقّي callbacks عند اتصال أو انقطاع اتصال عميل البلوتوث.
إطار عمل الصور المتحركة
يتيح لك إطار عمل الرسوم المتحرّكة المرن الجديد تمامًا إضافة تأثيرات متحركة إلى أيّ خصائص عشوائية لأيّ عنصر (عرض أو عنصر قابل للرسم أو جزء أو عنصر أو أيّ شيء آخر). يتيح لك تحديد عدة جوانب من الصورة المتحركة، مثل:
- المدة
- مقدار التكرار والسلوك
- نوع استقراء الوقت
- يضبط صانع الرسوم المتحركة تشغيل الرسوم المتحركة معًا أو بشكل تسلسلي أو بعد تأخيرات محدّدة.
- تأخير إعادة تحميل الإطار
يمكنك تحديد جوانب التحريك هذه وغيرها لقيم int وfloat و
اللون الست عشري للعنصر تلقائيًا. وهذا يعني أنّه عندما يحتوي الجسم على حقل خاصية لأحد هذين النوعَين،
يمكنك تغيير قيمته بمرور الوقت للتأثير في صورة متحركة. لإضافة تأثيرات متحركة إلى أي نوع آخر من القيم، عليك إعلام
النظام بطريقة احتساب القيم لهذا النوع المحدّد، وذلك من خلال تنفيذ واجهة TypeEvaluator
.
هناك مُشغِّلَان للرسوم المتحركة يمكنك استخدامهما لتحريك قيم سمة: ValueAnimator
وObjectAnimator
. يحتسب ValueAnimator
قيم الحركة، لكنه لا يعرف السمة المحددة
كائن أو خاصية يتم تحريكها نتيجة لذلك. وهي تُجري العمليات الحسابية ببساطة، وعليك
الاستماع إلى التعديلات ومعالجة البيانات باستخدام منطقك الخاص. ObjectAnimator
هي فئة فرعية من ValueAnimator
يسمح لك بتعيين الكائن والخاصية على الحركة، كما أنها تتعامل مع جميع أعمال الرسوم المتحركة.
وهذا يعني أنّك تمنح ObjectAnimator
الكائن الذي تريد إضافة حركة إليه،
وسمة الكائن التي تريد تغييرها بمرور الوقت، ومجموعة من القيم لتطبيقها على السمة بمرور
الوقت، ثم تبدأ الحركة.
بالإضافة إلى ذلك، تتيح الفئة LayoutTransition
النقل التلقائي.
والرسوم المتحركة للتغييرات التي تجريها على تخطيط نشاطك. ولتفعيل الانتقالات لجزء من
تنسيق، أنشئ كائن LayoutTransition
واضبطه على
أي ViewGroup
من خلال الاتصال بـ setLayoutTransition()
. يؤدي هذا إلى
الرسوم المتحركة لتشغيلها عند إضافة عناصر إلى المجموعة أو إزالتها منها. لتحديد خيار مخصّص
صور متحركة، وطلب setAnimator()
على LayoutTransition
وتوفير Animator
مخصص،
على سبيل المثال ValueAnimator
أو ObjectAnimator
التي تمت مناقشتها أعلاه.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Property Animation. يمكنك الاطّلاع أيضًا على العديد من العيّنات باستخدام واجهات برمجة التطبيقات للرسوم المتحركة في تطبيق API التجريبية.
إطار عمل واجهة المستخدم الموسَّعة
- خيار "خيارات متعدّدة" لكلّ من ListView وGridView
يتيح وضع
CHOICE_MODE_MULTIPLE_MODAL
الجديد فيsetChoiceMode()
للمستخدمين اختيار عناصر متعددة منListView
أوGridView
. عند استخدامها بالاشتراك مع "شريط الإجراءات"، يمكن للمستخدمين اختيار عناصر متعدّدة ثم اختيار الإجراء الذي يريدون تنفيذه من قائمة الخيارات في "شريط الإجراءات" (الذي تم تحويله إلى "وضع إجراءات بتعدّد الخيارات").لتفعيل ميزة الاختيار من متعدد، يُرجى الاتصال بالرقم
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
وتسجيلMultiChoiceModeListener
معsetMultiChoiceModeListener()
.عندما يضغط المستخدم مع الاستمرار على أحد العناصر، يتحول شريط الإجراءات إلى الخيارات المتعددة وضع الإجراء. يرسل النظام إشعارًا إلى جهاز "
MultiChoiceModeListener
" عند اختيار العناصر من خلال الاتصال بـonItemCheckedStateChanged()
.للحصول على مثال على اختيار من بين خيارات متعدّدة، اطّلِع على فئة List15. java في نموذج تطبيق "العروض التوضيحية لواجهات برمجة التطبيقات".
- واجهات برمجة تطبيقات جديدة لتحويل المشاهدات
تتيح لك واجهات برمجة التطبيقات الجديدة تطبيق عمليات التحويل الثنائية الأبعاد والثلاثية الأبعاد بسهولة على طرق العرض ضمن نشاطك. التصميم. ويمكن إجراء إحالات ناجحة جديدة من خلال مجموعة من خصائص العناصر التي تحدِّد سمات طريقة العرض. موضع التخطيط والاتجاه والشفافية والمزيد.
تشمل الطرق الجديدة لضبط خصائص العرض ما يلي:
setAlpha()
وsetBottom()
وsetLeft()
وsetRight()
وsetBottom()
وsetPivotX()
وsetPivotY()
وsetRotationX()
وsetRotationY()
وsetScaleX()
وsetScaleY()
وsetAlpha()
وغيرها.تحتوي بعض الطرق أيضًا على سمة XML مقابلة يمكنك تحديدها في التنسيق لتطبيق تحويل تلقائي. تشمل السمات المتاحة ما يلي:
translationX
وtranslationY
وrotation
rotationX
،rotationY
،scaleX
،scaleY
،transformPivotX
،transformPivotY
وalpha
.باستخدام بعض خصائص العرض الجديدة هذه مع إطار العمل الجديد للصور المتحركة (المذكور أعلاه)، يمكنك بسهولة تطبيق بعض الصور المتحركة الرائعة على مشاهدك. على سبيل المثال، لتدوير على محوره الصادي، زوّد
ObjectAnimator
بالرمزView
، أي "التدوير ص" الخاصة بها، وقيم البداية والنهاية:Kotlin
ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply { duration = 2000 start() }
Java
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360); animator.setDuration(2000); animator.start();
- مظاهر ثلاثية الأبعاد جديدة
تمت إعادة تصميم التطبيقات المصغّرة للنظام والمظهر العام ودمج أدوات جديدة. "مجسم" مظهر واجهة المستخدم. يطبِّق النظام المظهر الجديد باستخدام نظام النمط والمظهر العادي.
يكتسب أي تطبيق يستهدف نظام التشغيل Android 3.0 المظهر الثلاثي الأبعاد تلقائيًا من خلال ضبط قيمة
android:minSdkVersion
أوandroid:targetSdkVersion
على"11"
. ومع ذلك، إذا طبَّق تطبيقك أيضًا مظهره الخاص، سيحلّ مظهره محل المظهر المجسم، ما لم تعدِّل أنماطك لتلقّي المظهر المجسم.لتطبيق المظهر المجسم على الأنشطة الفردية أو اكتسابها في المظهر الخاص بك تعريفات، استخدم أي من الأعمدة الجديدة العديدة
Theme.Holo
الموضوعات. إذا كان تطبيقك متوافقًا مع إصدار Android أقدم من 3.0 وتم تطبيقه مظاهر مخصصة، يجب عليك تحديد مظهر وفقًا للنظام الأساسي الإصدار. - تطبيقات مصغّرة جديدة
AdapterViewAnimator
الفئة الأساسية لـ
AdapterView
التي تنفِّذ الصور المتحركة عند التبديل بين طرق العرض.AdapterViewFlipper
ViewAnimator
بسيطة تنتقل بين عرضَين أو أكثر تمت إضافتها إليها يتم عرض طفل واحد فقط في كل مرة. ويمكنه التبديل تلقائيًا بين كل طفل على فترات منتظمة إذا طُلب ذلك.CalendarView
السماح للمستخدمين باختيار تواريخ من تقويم من خلال لمس التاريخ، ويمكنهم التمرير أو التمرير سريعًا في التقويم إلى التاريخ المطلوب يمكنك ضبط نطاق التواريخ المتاحة في الأداة.
ListPopupWindow
تثبيت نفسها في عرض المضيف وعرض قائمة من الاختيارات، مثل قائمة من الخيارات اقتراحات عند الكتابة في طريقة عرض
EditText
.NumberPicker
تتيح للمستخدم اختيار رقم من نطاق محدّد مسبقًا. يعرض التطبيق المصغّر إدخالاً وزر لأعلى ولأسفل لاختيار رقم. من خلال النقر على حقل الإدخال، يمكن للمستخدم التمرير بين القيم أو النقر مرة أخرى لتعديل القيمة الحالية مباشرةً. ويسمح لك أيضًا بربط مواضع الكلمات بسلسلة من الكلمات، بحيث يتم عرض السلسلة المقابلة بدلاً من موضع السلسلة في الفهرس.
PopupMenu
تعرض هذه السمة
Menu
في نافذة منبثقة مشروطة تكون ثابتة في إحدى طرق العرض. تشير رسالة الأشكال البيانية أسفل عرض الإرساء في حال وجود مساحة، أو فوقه إذا لم يكن هناك مساحة. إذا كانت ميزة IME (لوحة مفاتيح البرمجي) ظاهرة، لا يتداخل النافذة المنبثقة مع ميزة IME إلى أن يلمس المستخدم القائمة.SearchView
يوفّر مربّع بحث يمكنك إعداده لإرسال طلبات البحث إلى نشاط محدّد وعرض اقتراحات البحث (بالطريقة نفسها المستخدَمة في مربّع الحوار التقليدي للبحث). وتكون هذه القطعة مفيدة بشكل خاص لتقديم أداة بحث في شريط الإجراءات. لمزيد من المعلومات راجع إنشاء واجهة بحث.
StackView
طريقة عرض تعرض عناصرها الثانوية في حزمة ثلاثية الأبعاد وتسمح للمستخدمين بالتمرير مثل rolodex.
الرسومات
- رسومات ثنائية الأبعاد مُسرَّعة بالأجهزة
يمكنك الآن تفعيل عارض OpenGL لتطبيقك من خلال ضبط
android:hardwareAccelerated="true"
في العنصر<application>
الخاص بعنصر البيان. عنصر أو لفرد<activity>
عناصر.تساعد هذه العلامة التطبيقات من خلال جعلها ترسم بشكل أسرع. ويؤدي ذلك إلى ظهور صور متحركة أكثر سلاسة، وعرض المحتوى بشكل أكثر سلاسة، وتحسين الأداء بشكل عام والاستجابة بشكل أفضل لتفاعل المستخدم.
- عرض دعم طبقات الأجهزة والبرامج
لا يتم تحديد طبقة تلقائيًا لعنصر
View
. يمكنك تحديد أنّه يجب أن يكون العرض مدعومًا إما بطبقة أجهزة أو برامج، يتم تحديدها بالقيمLAYER_TYPE_HARDWARE
وLAYER_TYPE_SOFTWARE
، باستخدامسمةsetLayerType()
أوlayerType
.تستند طبقة الأجهزة إلى نسيج خاص بالأجهزة (بشكل عام، عناصر ذاكرة التخزين المؤقت للإطارات أو FBO على أجهزة OpenGL) وتؤدي إلى عرض العناصر باستخدام مسار معالجة رسومات الأجهزة في Android، ولكن فقط في حال تفعيل ميزة "تسريع الأجهزة" لسلسلة العرض الهرمي. عندما يكون الجهاز يتم إيقاف التسريع، وتعمل طبقات الأجهزة مثل طبقات البرنامج تمامًا.
طبقة البرامج مدعومة بصورة نقطية وتؤدي إلى عرض طريقة العرض باستخدام واجهة مسار عرض البرامج، حتى في حال تفعيل تسريع الأجهزة. يجب تجنُّب استخدام طبقات البرامج عندما يتم تعديل شجرة العرض المتأثرة بشكل متكرّر. سيتطلّب كل تعديل إعادة عرض طبقة البرامج، ما قد يؤدي إلى بطء الأداء.
لمزيد من المعلومات، اطّلِع على المستندَين
LAYER_TYPE_HARDWARE
وLAYER_TYPE_SOFTWARE
. - محرك الرسومات الثلاثية الأبعاد Renderscript
Renderscript هو إطار عمل ثلاثي الأبعاد لوقت التشغيل يقدّم واجهة برمجة تطبيقات لإنشاء مَشاهد ثلاثية الأبعاد، بالإضافة إلى لغة خاصة لتأثيرات الإضاءة لا تعتمد على النظام الأساسي لتحقيق أفضل أداء. باستخدام Renderscript، تسريع عمليات الرسومات ومعالجة البيانات. Renderscript هي طريقة مثالية لإنشاء تأثيرات ثلاثية الأبعاد عالية الأداء للتطبيقات والخلفيات واللوحات الدوّارة وغير ذلك.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات العرض الثلاثي الأبعاد والعمليات الحسابية باستخدام Renderscript.
الوسائط
- فيديو باستخدام وضع "التسريع الزمني"
تتيح واجهات برمجة تطبيقات كاميرات الفيديو الآن إمكانية تسجيل فيديو باستخدام ميزة "التسريع الزمني". يحدِّد
setCaptureRate()
معدّل التقاط اللقطات. - إتاحة الزخرفة في عمليات بث الصور
يتيح لك الإصدار الجديد من
SurfaceTexture
التقاط بث صور كنسيج OpenGL ES . من خلال الاتصال بـsetPreviewTexture()
للحصول على على سبيل المثالCamera
، يمكنك تحديدSurfaceTexture
التي سيتم بناءً عليها رسم تشغيل الفيديو أو معاينة الإطارات من والكاميرا. - البث المباشر عبر HTTP
يمكن للتطبيقات الآن تمرير عنوان URL لقائمة تشغيل M3U إلى إطار عمل الوسائط لبدء HTTP Live جلسة بث مباشر. يتوافق إطار عمل الوسائط مع معظم مواصفات البث المباشر عبر HTTP، بما في ذلك معدل نقل البيانات التكيفي اطّلِع على مستند تنسيقات الوسائط المتوافقة للحصول على مزيد من المعلومات.
- بيانات EXIF
تتضمّن "
ExifInterface
" حقولاً جديدة لكل من فتحة الصورة وحساسية الضوء ودرجة الإضاءة. الوقت. - الملفات الشخصية لكاميرات الفيديو
تتيح لك طريقة
hasProfile()
الجديدة والعديد من الملفات الشخصية لتحديد جودة الفيديو (مثلQUALITY_1080P
وQUALITY_720P
وQUALITY_CIF
وغيرها) تحديد خيارات جودة كاميرا الفيديو. - نقل ملفات الوسائط الرقمية
تتضمّن المنصة ميزة مدمجة لاستخدام بروتوكول نقل الوسائط/الصور (MTP/PTP) عبر USB، مما يتيح للمستخدمين نقل أي نوع من ملفات الوسائط بسهولة بين الأجهزة وإلى جهاز كمبيوتر مضيف. يمكن للمطوّرين الاستفادة من هذه الميزة من خلال إنشاء تطبيقات تتيح للمستخدمين إنشاء ملفات وسائط غنية أو إدارتها قد يريدون نقلها أو مشاركتها على جميع الأجهزة.
- إدارة الحقوق الرقمية (DRM)
إطار عمل جديد قابل للتوسيع لإدارة الحقوق الرقمية (DRM) للتحقّق من الحقوق الرقمية وفرضها يتم تنفيذها في طبقتين معماريتين:
- واجهة برمجة تطبيقات إطار عمل إدارة الحقوق الرقمية (DRM)، والتي يتم عرضها للتطبيقات ويتم تشغيلها من خلال "الآلة الافتراضية Dalvik" لتطبيق التطبيقات العادية
- مدير إدارة الحقوق الرقمية (DRM) للرمز البرمجي الأصلي الذي ينفِّذ واجهة برمجة التطبيقات للإطار ويعرِض واجهة لمكوّنات إضافية لنظام إدارة الحقوق الرقمية (DRM) من أجل إدارة الحقوق وفك التشفير لمختلف مخططات إدارة الحقوق الرقمية
بالنسبة إلى مطوري التطبيقات، يقدم إطار العمل واجهة برمجة تطبيقات مختصرة وموحدة تعمل على تبسيط إدارة المحتوى المحمي تحجب واجهة برمجة التطبيقات تعقيد عمليات إدارة الحقوق الرقمية وتسمح بوضع تشغيل متسق لكل من المحتوى المحمي وغير المحمي، وعلى مستوى مجموعة متنوعة من مخططات إدارة الحقوق الرقمية.
بالنسبة إلى مصنعي الأجهزة ومالكي المحتوى ومقدّمي الوسائط الرقمية على الإنترنت، توفّر واجهة برمجة التطبيقات الخاصة بالمكونات الإضافية لإطار عمل إدارة الحقوق الرقمية (DRM) وسيلة لإضافة إمكانية استخدام مخطط إدارة الحقوق الرقمية المفضّل في نظام Android لفرض حماية المحتوى بأمان.
لا يقدّم إصدار المعاينة أيّ مكونات إضافية لإدارة الحقوق الرقمية (DRM) الأصلية للتحقّق من الحقوق الرقمية وفرضها. ومع ذلك، يمكن للشركات المصنّعة للأجهزة شحن مكوّنات DRM الإضافية مع أجهزتهم.
يمكنك العثور على جميع واجهات برمجة تطبيقات DRM في حزمة
android.drm
.
دعم لوحة المفاتيح
- إتاحة عناصر التعديل Control وMeta وCaps Lock وNum Lock و Scroll Lock. لمزيد من المعلومات
اطّلِع على
META_CTRL_ON
والحقول ذات الصلة. - دعم للوحات المفاتيح الكاملة بنمط سطح المكتب، بما في ذلك دعم مفاتيح مثل Escape وHome وEnd
"حذف" وغير ذلك. ويمكنك تحديد ما إذا كان مصدر الأحداث الرئيسية هو لوحة مفاتيح كاملة من خلال اتّباع الخطوات التالية:
جارٍ الاستعلام عن
getKeyboardType()
والتحقّق منKeyCharacterMap.FULL
- يتيح تطبيق
TextView
الآن استخدام لوحة المفاتيح لقطع المحتوى ونسخه ولصقه واختيار الكل، وذلك باستخدام مجموعات المفاتيح Control+X وControl+C وControl+V وControl+A. تتيح هذه الميزة أيضًا استخدام مفاتيح PageUp/PageDown وHome/End و تحديد النص بالاستناد إلى لوحة المفاتيح. - تضيف
KeyEvent
عدة طرق جديدة لتسهيل التحقّق من حالة مفتاح المعدِّل بشكل صحيح ومتسق. يمكنك الاطّلاع علىhasModifiers(int)
.hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
- يمكن للتطبيقات تنفيذ اختصارات لوحة مفاتيح مخصّصة من خلال التصنيف الفرعي
Activity
أوDialog
أوView
وتنفيذonKeyShortcut()
يستدعي إطار العمل هذه الطريقة عند دمج مفتاح مع مفتاح التحكّم. عند إنشاء قائمة خيارات، يمكنك تسجيل اختصارات لوحة مفاتيح من خلال ضبط سمةandroid:alphabeticShortcut
أوandroid:numericShortcut
لكل عنصر<item>
(أو باستخدامsetShortcut()
). - يتضمّن الإصدار 3.0 من نظام التشغيل Android جهاز "لوحة مفاتيح افتراضية" جديدًا يحمل رقم التعريف
KeyCharacterMap.VIRTUAL_KEYBOARD
. النسخة الافتراضية تحتوي لوحة المفاتيح على خريطة رئيسية بنمط سطح المكتب في الولايات المتحدة، وهي مفيدة لتجميع الأحداث الرئيسية من أجل الاختبار إدخال.
تقسيم أحداث اللمس
في السابق، كان بإمكان عرض واحد فقط قبول أحداث اللمس في المرة الواحدة. يضيف الإصدار 3.0 من نظام التشغيل Android إمكانية تقسيم أحداث اللمس على مستوى طرق العرض وحتى النوافذ، حتى تتمكّن طرق العرض المختلفة من قبول أحداث اللمس المتزامنة.
يتم تفعيل أحداث اللمس المجزّأة تلقائيًا عندما يستهدف أحد التطبيقات الإصدار
Android 3.0. أي عندما يحدّد التطبيق إما android:minSdkVersion
أو قيمة السمة android:targetSdkVersion
إلى "11"
.
ومع ذلك، تتيح لك السمات التالية إيقاف أحداث اللمس المجزّأة في جميع طرق العرض داخل مجموعات طرق عرض معيّنة وفي جميع النوافذ.
- سمة
android:splitMotionEvents
لمجموعات المشاهد تسمح لك بإيقاف أحداث اللمس المجزّأة التي تحدث بين المشاهد الثانوية في تنسيق. مثلاً:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
بهذه الطريقة، لا يمكن للعروض الفرعية في التنسيق الخطي تقسيم أحداث اللمس، بل يمكن لعرض واحد فقط تلقّي أحداث اللمس في المرة الواحدة.
- خاصية النمط
android:windowEnableSplitTouch
يسمح لك بتعطيل أحداث اللمس عبر النوافذ، عن طريق تطبيقها على مظهر في النشاط أو تطبيقًا كاملاً. مثلاً:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
عند تطبيق هذا المظهر على
<activity>
أو<application>
، لا يتم قبول سوى أحداث اللمس ضمن نافذة النشاط الحالية. على سبيل المثال، عند إيقاف أحداث اللمس المجزّأة في جميع النوافذ، لا يمكن لشريط النظام تلقّي أحداث اللمس في الوقت نفسه الذي يتم فيه تنفيذ الإجراء. لا يؤثّر ذلك في ما إذا كان بإمكان المشاهدات داخل النشاط تقسيم أحداث اللمس، إذ سيظل بإمكان النشاط تقسيم أحداث اللمس على مستوى المشاهدات تلقائيًا.للمزيد من المعلومات عن إنشاء مظهر، يُرجى الاطّلاع على تطبيق الأنماط والمظاهر.
مجموعة أدوات الويب
- فئة
WebViewFragment
جديدة لإنشاء جزء يتألّف منWebView
- طرق
WebSettings
الجديدة:- يتيح لك
setDisplayZoomControls()
إخفاء عناصر التحكّم في التكبير أو التصغير التي تظهر على الشاشة مع السماح للمستخدم بالتكبير أو التصغير باستخدام إيماءات الأصابع (يجب ضبطsetBuiltInZoomControls()
true
). - تتيح لك طريقة
WebSettings
الجديدة،setEnableSmoothTransition()
، تفعيل الانتقالات السلسة عند التمرير السريع والتكبير/التصغير. عند تفعيل هذه الميزة، سيختار WebView حلًا لتحسين الأداء إلى أقصى حد (على سبيل المثال، قد لا يتم تعديل محتوى WebView أثناء عملية التحويل).
- يتيح لك
- طُرق
WebView
الجديدة:onPause()
callback، لإيقاف أي معالجة مؤقتًا المرتبطة بـ WebView عندما يصبح مخفيًا يكون ذلك مفيدًا لتقليل استخدام وحدة المعالجة المركزية أو حركة البيانات غير الضرورية على الشبكة عندما لا يكون WebView في المقدّمة.onResume()
callback، لاستئناف المعالجة المرتبطة بـ WebView، والتي تم إيقافها مؤقتًا أثناءonPause()
saveWebArchive()
يتيح لك حفظ الاطّلاع الحالي كمرفق ويب على الجهاز.showFindDialog()
يبدأ عملية بحث نصي في العرض الحالي.
المتصفح
يضيف تطبيق المتصفح الميزات التالية لتشغيل تطبيقات الويب:
- التقاط الوسائط
وفقًا لمواصفات HTML Media Capture، يسمح المتصفّح لتطبيقات الويب بالوصول إلى ميزات التقاط الصوت والصور والفيديوهات المتوفّرة على الجهاز. على سبيل المثال، توفر لغة HTML التالية مدخلاً للمستخدم التقاط صورة لتحميلها:
<input type="file" accept="image/*;capture=camera" />
أو من خلال استبعاد المَعلمة
capture=camera
، يمكن للمستخدم اختيار التقاط صورة جديدة باستخدام الكاميرا أو اختيار صورة من الجهاز (مثل تطبيق "معرض الصور"). - اتجاه الجهاز
على النحو المحدّد في حدث اتجاه الجهاز المواصفات، يتيح المتصفح لتطبيقات الويب الاستماع إلى أحداث DOM التي توفر معلومات حول الاتجاه المادي وحركة الجهاز.
يتم التعبير عن اتجاه الجهاز باستخدام المحاور x وy وz بالدرجات، ويتم التعبير عن الحركة باستخدام بيانات التسارع ومعدل الدوران. يمكن تسجيل صفحة ويب في الاتجاه الأحداث من خلال الاتصال بـ
window.addEventListener
مع نوع الحدث"deviceorientation"
والتسجيل في فعاليات الحركة من خلال تسجيل نوع الحدث"devicemotion"
. - عمليات التحويل الثلاثية الأبعاد في CSS
وفقًا لمواصفات وحدة التحويل الثلاثي الأبعاد في CSS ، يسمح المتصفّح بتحويل العناصر التي تعرضها لغة CSS في ثلاثة أبعاد.
أدوات تنسيق JSON
ستساعدك الصفوف الجديدة "JsonReader
" و"JsonWriter
"
قراءة وكتابة تدفقات JSON. تكمل واجهات برمجة التطبيقات الجديدة فئات org.json
التي تُجري تعديلات على
مستند في الذاكرة.
يمكنك إنشاء مثيل من JsonReader
من خلال استدعاء
طريقة وضع التصميم الخاصة به وضبط InputStreamReader
الذي يغذّي سلسلة JSON.
بعد ذلك، ابدأ بقراءة عنصر من خلال استدعاء beginObject()
، واقرأ اسمًا
مفتاحًا باستخدام nextName()
، واقرأ القيمة باستخدام طُرق
متوافقة مع النوع، مثل nextString()
وnextInt()
، واستمر في إجراء ذلك ما دامت قيمة hasNext()
صحيحة.
يمكنك إنشاء مثيل لـ JsonWriter
من خلال استدعاء الدالة الإنشائية لها
تمرير OutputStreamWriter
المناسبة. بعد ذلك، اكتب بيانات JSON بطريقة مشابهة للقارئ، باستخدام name()
لإضافة اسم خاصي
ومنهج value()
مناسب لإضافة القيمة
المعنية.
تكون هذه الفئات صارمة بشكل تلقائي. تعمل طريقة setLenient()
في كل فئة على ضبطها لتكون أكثر تسامحًا في ما تقبله. هذا التساهل
وضع التحليل متوافق أيضًا مع المحلِّل اللغوي التلقائي في org.json
.
ثوابت الميزات الجديدة
يجب استخدام عنصر البيان <uses-feature>
لإعلام الكيانات الخارجية (مثل Google Play) بمجموعة
ميزات الأجهزة والبرامج التي يعتمد عليها تطبيقك. في هذا الإصدار، يضيف Android
الثوابت الجديدة التالية التي يمكن للتطبيقات تعريفها باستخدام هذا العنصر:
"android.hardware.faketouch"
عند تحديد هذه السمة، يعني ذلك أنّ التطبيق متوافق مع جهاز يقدّم شاشة تعمل باللمس (أو أفضل) تم محاكاتها. يشير الجهاز الذي يوفّر شاشة تعمل باللمس إلى المحاكاة إلى أنّ المستخدم يمكنه إدخال البيانات. نظام يمكنه محاكاة مجموعة فرعية من الشاشة التي تعمل باللمس والإمكانات. ومن أمثلة نظام الإدخال هذا ماوس أو جهاز تحكم عن بُعد يقوم بتشغيل مؤشر الماوس على الشاشة تتيح أنظمة الإدخال هذه أحداث اللمس الأساسية مثل النقر للأسفل والنقر للأعلى والسحب. ومع ذلك، قد تكون أنواع الإدخال الأكثر تعقيدًا (مثل الإيماءات والحركات السريعة وما إلى ذلك) أكثر صعوبة أو مستحيل على أجهزة اللمس الزائفة (كما أن إيماءات اللمس المتعدد غير ممكنة بالتأكيد).
إذا كان تطبيقك لا يتطلّب إيماءات معقّدة ولم تكن تريد عدم فلترة تطبيقك من الأجهزة التي تتضمّن شاشة لمس محاكية، عليك الإفصاح عن
"android.hardware.faketouch"
باستخدام عنصر<uses-feature>
. بهذه الطريقة، سيكون تطبيقك متاحًا لأكبر عدد من أنواع الأجهزة، بما في ذلك تلك التي لا توفّر سوى شاشة تعمل باللمس محاكية.تتوافق أيضًا جميع الأجهزة التي تتضمّن شاشة تعمل باللمس مع
"android.hardware.faketouch"
، لأنّ إمكانات الشاشة التي تعمل باللمس هي أهمّ إمكانات اللمس الزائف. وبالتالي، ما لم تكن تحتاج بالفعل إلى الشاشة التي تعمل باللمس، عليك إضافة<uses-feature>
لـ fake touch.
الأذونات الجديدة
"android.permission.BIND_REMOTEVIEWS"
يجب الإشارة إلى أنّ هذا الإذن مطلوب في بيان
<service>
. لتطبيقRemoteViewsService
. على سبيل المثال، عند إنشاء تطبيق مصغّر يستخدمRemoteViewsService
لتعبئة عرض مجموعة، قد يبدو إدخال البيان على النحو التالي:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
تقنيات المنصات الجديدة
- مساحة التخزين
- دعم نظام الملفات ext4 لتفعيل مساحة تخزين eMMC الداخلية
- نظام الملفات FUSE يتوافق مع أجهزة MTP.
- دعم وضع مضيف USB لدعم لوحات المفاتيح وموزّعات USB.
- التوافق مع بروتوكول MTP/PTP
- Linux Kernel
- تم الترقية إلى الإصدار 2.6.36
- Dalvik VM
- رمز جديد لدعم "الحملات على شبكة البحث" وتحسينها
- تحسينات متنوّعة على البنية الأساسية لميزة "التجميع أثناء التنفيذ"
- التحسينات التي تم إجراؤها على جهاز تجميع القمامة:
- تم ضبطها لنظام "الإعلانات على شبكة البحث"
- إتاحة أحجام أكبر للذاكرة العشوائية
- معالجة موحّدة لملفات الأشكال الممسوحة ضوئيًا ووحدات تخزين البايتات
- مكتبات دالفيك الأساسية
- تنفيذ جديد وأكثر سرعةً لـ NIO (مكتبة I/O الحديثة)
- رسائل استثناء محسّنة
- إصلاحات على الصحة والأداء
تقرير الاختلافات في واجهة برمجة التطبيقات
للحصول على عرض تفصيلي لجميع تغييرات واجهة برمجة التطبيقات في Android 3.0 (مستوى واجهة برمجة التطبيقات) 11)، يُرجى الاطّلاع على تقرير الاختلافات في واجهة برمجة التطبيقات.
مستوى واجهة برمجة التطبيقات
توفّر منصة Android 3.0 إصدارًا معدَّلاً من واجهة برمجة التطبيقات لإطار العمل. واجهة برمجة التطبيقات Android 3.0 يتم تعيين معرّف عدد صحيح — 11: يمثّل في النظام نفسه. يُعرف هذا المعرّف باسم "مستوى واجهة برمجة التطبيقات"، ويسمح للنظام بتحديد ما إذا كان التطبيق متوافقًا مع النظام بشكلٍ صحيح قبل تثبيته.
لاستخدام واجهات برمجة التطبيقات المقدّمة في الإصدار 3.0 من نظام التشغيل Android في تطبيقك،
ستحتاج إلى تجميع التطبيق مقابل مكتبة Android المتوفرة
النظام الأساسي لحزمة تطوير البرامج (SDK) لنظام التشغيل Android 3.0. استنادًا إلى احتياجاتك، قد تحتاج
أيضًا إلى إضافة سمة android:minSdkVersion="11"
إلى عنصر <uses-sdk>
فيملف
بيان التطبيق. إذا كان تطبيقك مصمّمًا للعمل على الإصدار 2.3 من نظام التشغيل Android والإصدارات الأحدث فقط، يؤدي تحديد السمة إلى منع تثبيت التطبيق على الإصدارات الأقدم من المنصة.
لمزيد من المعلومات، يُرجى الاطّلاع على ما هو API Level؟