مستوى واجهة برمجة التطبيقات: 17
Android 4.2 (JELLY_BEAN_MR1
)
هو تحديث لإصدار Jelly Bean الذي يقدم ميزات جديدة للمستخدمين والتطبيقات
المطورين. يقدم هذا المستند مقدمة إلى أهم
واجهات برمجة تطبيقات جديدة ومفيدة للمطورين.
وبصفتك مطوِّر تطبيقات، يجب عليك تنزيل صورة النظام لنظام Android 4.2 ونظام SDK الأساسي من مدير SDK في أقرب وقت ممكن. إذا كنت لم يكن لديك جهاز يعمل بنظام التشغيل Android 4.2 حيث يمكنك اختبار تطبيقك عليه، واستخدام نظام Android 4.2 لاختبار تطبيقك على محاكي Android. بعد ذلك صمم تطبيقاتك وفقًا للنظام الأساسي Android 4.2 لتبدأ في استخدام أحدث واجهات برمجة التطبيقات.
لتحسين تطبيقك بشكل أفضل على الأجهزة التي تعمل بنظام التشغيل Android 4.2،
يجب ضبط targetSdkVersion
على
"17"
، ثبِّته على نسخة نظام Android 4.2،
واختباره، ثم نشر تحديث يتضمّن هذا التغيير
إِنْتَ
استخدام واجهات برمجة التطبيقات في الإصدار 4.2 من نظام التشغيل Android مع دعم الإصدارات الأقدم أيضًا من خلال إضافة
الشروط إلى الرمز البرمجي الذي يتحقّق من مستوى واجهة برمجة تطبيقات النظام قبل التنفيذ
واجهات برمجة التطبيقات غير متوافقة مع minSdkVersion
.
لمزيد من المعلومات حول
الحفاظ على التوافق مع الأنظمة القديمة، اقرأ إنشاء متوافقة مع الإصدارات القديمة
واجهات المستخدم:
يتوفّر مزيد من المعلومات حول طريقة عمل مستويات واجهة برمجة التطبيقات في مقالة ما هي واجهة برمجة التطبيقات؟ ما هو المستوى؟
تغييرات مهمة في السلوك
إذا سبق لك نشر تطبيق لنظام Android، يُرجى الانتباه لما يلي: التغييرات التي قد تؤثّر في سلوك تطبيقك:
- لن يتمّ تصدير موفّري المحتوى بشكل تلقائي. أي أن القيمة الافتراضية
بالنسبة إلى السمة
android:exported
أصبح الآن“false"
. إذا كان من المهم تعديل التطبيقات الأخرى من الوصول إلى مقدم المحتوى، يجب عليك الآن تعيينandroid:exported="true"
.لا يسري هذا التغيير إلا في حال ضبط القيمة
android:targetSdkVersion
أوandroid:minSdkVersion
على 17 أو أعلى. وبخلاف ذلك، ستظل القيمة التلقائية هي“true"
حتى عند تشغيله على الإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث. - قد تكون نتائج الموقع الجغرافي للمستخدم أقل دقة مقارنةً بالإصدارات السابقة من Android.
إذا كان تطبيقك يطلب إذن "
ACCESS_COARSE_LOCATION
" ولكن لا يطلب إذنACCESS_FINE_LOCATION
.تلبية توقعات الخصوصية لدى المستخدمين عندما يطلب تطبيقك إذنًا من أجل الموقع الجغرافي التقريبي (وليس الموقع الجغرافي الدقيق)، لن يوفّر النظام تقديرًا للموقع الجغرافي للمستخدم. أكثر دقة من مبنى سكني في المدينة.
- بعض إعدادات الجهاز التي تم تحديدها من خلال "
Settings.System
" أصبحت متاحة الآن للقراءة فقط. إذا حاول تطبيقك كتابة تغييرات على الإعدادات المحدّدة فيSettings.System
والتي تم نقلها إلىSettings.Global
، ستفشل عملية الكتابة تلقائيًا عند التشغيل على Android 4.2 والإصدارات الأحدث.حتى إذا كانت قيمة
android:targetSdkVersion
وandroid:minSdkVersion
أقل من 17، لا يمكن لتطبيقك تعديل الإعدادات التي تحتوي على تم نقلها إلىSettings.Global
عند تشغيله على الإصدار 4.2 من Android أو الإصدارات الأحدث. - إذا كان تطبيقك يستخدم
WebView
، يضيف Android 4.2 طبقة إضافية من من الأمان، وبالتالي يمكنك ربط JavaScript بأمان رمز Android إذا قمت بتعيينtargetSdkVersion
إلى 17 أو أعلى، يجب عليك الآن إضافة التعليق التوضيحي@JavascriptInterface
إلى أي طريقة ترغب في توفرها لـ JavaScript (يجب أن تكون الطريقة عامة أيضًا). إذا لم يتم تقديم التعليق التوضيحي، لا يمكن الوصول إلى هذه الطريقة من خلال صفحة ويب فيWebView
عند تشغيله على الإصدار Android 4.2 أو الإصدارات الأحدث. إذا قمت بتعيينtargetSdkVersion
إلى 16 أو أقل، ليس هناك حاجة للتعليق التوضيحي، ولكن ننصحك بتحديث الإصدار المستهدف وإضافة تعليق توضيحي لمزيد من الأمان.قراءة المزيد عن الربط رمز JavaScript إلى رمز Android.
Daydream
أحلام اليقظة هي وضع شاشة استراحة تفاعلي جديد لأجهزة Android. يتم تفعيل الميزة تلقائيًا عند إدخال الجهاز في قاعدة إرساء أو عند تركه في وضع عدم النشاط أثناء توصيله الشاحن (بدلاً من إطفاء الشاشة). تعرض أحلام اليقظة حلمًا واحدًا في كل مرة، مما قد أن تكون شاشة عرض مرئية بحتة أو سلبية يتم إخفاؤها عند اللمس أو قد تكون تفاعلية وسريعة الاستجابة على الحزمة الكاملة من أحداث الإدخال. تجري أحلامك في سير التطبيق وتتمتع بإمكانية الوصول الكامل إلى مجموعة أدوات واجهة المستخدم من Android، بما في ذلك طرق العرض والتخطيطات والرسوم المتحركة، بحيث تكون أكثر مرونة أكثر فعالية من الخلفيات المتحركة أو أدوات التطبيقات.
يمكنك إنشاء حلم لـ Daydream من خلال تنفيذ فئة فرعية من DreamService
. واجهات برمجة تطبيقات DreamService
صُممت لتكون مشابهة لتلك الخاصة بـ Activity
. لتحديد واجهة المستخدم
يمكنك ضبط معرِّف لمورد التنسيق أو View
إلى setContentView()
في أي وقت بعد حصولك على
نافذة، مثل من onAttachedToWindow()
معاودة الاتصال.
توفّر الفئة DreamService
معاودة الاتصال المهمة الأخرى في مراحل النشاط
في أعلى واجهات برمجة تطبيقات Service
الأساسية، مثل onDreamingStarted()
وonDreamingStopped()
وonDetachedFromWindow()
.
لا يمكنك بدء DreamService
من
تطبيق — يتم تشغيله تلقائيًا بواسطة النظام.
إذا كان حلمك تفاعليًا، فيمكنك بدء نشاط من الحلم لإرسال المستخدم إلى
واجهة المستخدم الكاملة لتطبيقك لمزيد من التفاصيل أو التحكم. يمكنك استخدام finish()
لإنهاء الحلم حتى يتمكّن المستخدم من رؤية
النشاط الجديد.
لإتاحة أحلام اليقظة للنظام، يجب تعريف جهاز DreamService
باستخدام العنصر <service>
.
في ملف البيان. وعليك بعد ذلك تضمين فلتر أهداف مع الإجراء "android.service.dreams.DreamService"
. مثلاً:
<service android:name=".MyDream" android:exported="true" android:icon="@drawable/dream_icon" android:label="@string/dream_label" > <intent-filter> <action android:name="android.service.dreams.DreamService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
هناك بعض الطرق المفيدة الأخرى في "DreamService
".
أن تكون على دراية بما يلي:
- يتحكّم
setInteractive(boolean)
في ما إذا كان يتلقى الحلم أحداث الإدخال أو يخرج على الفور عند إدخال المستخدم. إذا كان الحلم تفاعلية، يمكن للمستخدم استخدام زر الرجوع أو الصفحة الرئيسية للخروج من وضع الحلم أو يمكنك الاتصالfinish()
لإيقاف الحلم. - إذا كنت تريد الحصول على شاشة مجسمة بالكامل، يمكنك الاتصال بـ
setFullscreen()
لإخفاء شريط الحالة. - قبل بدء أحلام اليقظة، يخفت الشاشة لتُبلغ المستخدم عن انتهاء مهلة وضع عدم النشاط.
يقترب. يتيح لك الاتصال بالرقم
setScreenBright(true)
بدلاً من ذلك ضبط الشاشة على مستوى سطوعها المعتاد.
لمزيد من المعلومات، اطّلِع على مستندات "DreamService
".
الشاشات الثانوية
يسمح Android الآن لتطبيقك بعرض محتوى فريد على الشاشات الإضافية المتصلة
إلى جهاز المستخدم عبر اتصال سلكي أو شبكة Wi-Fi.
لإنشاء محتوى فريد لعرضه الثانوي، عليك توسيع نطاق Presentation
.
وتنفذ إحدى استدعاءات onCreate()
. ضمن
onCreate()
، عليك تحديد واجهة المستخدم الخاصة بالشاشة الثانوية
عبر الاتصال بـ setContentView()
.
كإضافة لفئة Dialog
، توفّر الفئة Presentation
المنطقة التي يمكن أن يعرض فيها تطبيقك واجهة مستخدم فريدة على
الشاشة الثانوية.
للتعرّف على شاشات العرض الثانوية التي يمكنك فيها عرض "Presentation
"، يُرجى اتّباع الخطوات التالية:
استخدِم DisplayManager
أو MediaRouter
واجهات برمجة التطبيقات. تسمح لك واجهات برمجة التطبيقات DisplayManager
بتعداد
شاشات متعددة قد تكون متصلة في آنٍ واحد، عليك عادةً استخدام MediaRouter
بدلاً من ذلك للوصول سريعًا إلى شاشة العرض التلقائية للنظام
وعروضك التقديمية.
للحصول على الشاشة التلقائية للعرض التقديمي، يُرجى الاتصال بالرقم MediaRouter.getSelectedRoute()
وتمريره.
ROUTE_TYPE_LIVE_VIDEO
يؤدي ذلك إلى عرض عنصر MediaRouter.RouteInfo
يصف المسار المحدّد حاليًا للنظام.
لعروض الفيديو التقديمية. إذا لم يكن MediaRouter.RouteInfo
فارغًا، اتّصل
getPresentationDisplay()
للحصول على Display
الذي يمثّل الشاشة المتصلة.
يمكنك بعد ذلك عرض العرض التقديمي من خلال تمرير كائن Display
إلى دالة إنشاء لفئة Presentation
. سيبدأ عرضك التقديمي الآن
تظهر على الشاشة الثانوية.
لرصد الاتصال بشاشة جديدة في وقت التشغيل، أنشئ مثيلاً لـ MediaRouter.SimpleCallback
يتم فيه تنفيذ طريقة معاودة الاتصال onRoutePresentationDisplayChanged()
التي سيستدعي النظام من خلالها
تم توصيل شاشة العرض التقديمي. ثم سجِّل MediaRouter.SimpleCallback
من خلال تمريره إلى MediaRouter.addCallback()
مع نوع المسار ROUTE_TYPE_LIVE_VIDEO
. عندما تتلقى مكالمة إلى
onRoutePresentationDisplayChanged()
، ما عليك سوى الاتصال بـ MediaRouter.getSelectedRoute()
كما هو مذكور أعلاه.
لتحسين واجهة المستخدم في Presentation
بشكل أكبر من أجل
الشاشات الثانوية، يمكنك تطبيق
مظهر مختلف عن طريق تحديد السمة android:presentationTheme
في <style>
التي
التطبيق على تطبيقك أو نشاطك.
ضع في اعتبارك أن الشاشات المتصلة بجهاز المستخدم غالبًا ما تكون لها حجم شاشة أكبر
من المحتمل أن تكون كثافة الشاشة مختلفة. نظرًا لأن خصائص الشاشة قد تختلف، يجب عليك
توفير موارد تم تحسينها خصيصًا لشاشات العرض الكبيرة هذه. إذا كنت بحاجة
لطلب موارد إضافية من "Presentation
"، يمكنك الاتصال بالرقم getContext()
.getResources()
للحصول على العنصر Resources
المتوافق مع الشاشة. يوفّر ذلك
الموارد المناسبة من تطبيقك الأكثر ملاءمةً
حجم شاشة العرض الثانوية وكثافتها
لمزيد من المعلومات وبعض نماذج الرموز، يُرجى مراجعة Presentation
.
وثائق الصف.
التطبيقات المصغّرة لشاشة القفل
يسمح Android الآن للمستخدمين بإضافة أدوات التطبيقات إلى شاشة القفل. لإتاحة أداة التطبيق للاستخدام على
شاشة القفل، أضِف السمة android:widgetCategory
إلى ملف XML الذي يحدّد AppWidgetProviderInfo
. تتيح هذه السمة استخدام قيمتَين: home_screen
وkeyguard
. يتم ضبط السمة تلقائيًا على home_screen
كي يتمكّن المستخدمون من إضافة
التطبيق المصغَّر إلى الشاشة الرئيسية. إذا أردت أن تكون أداة تطبيقك متاحة أيضًا في وضع القفل
الشاشة، أضف قيمة keyguard
:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:widgetCategory="keyguard|home_screen"> </appwidget-provider>
عليك أيضًا تحديد تنسيق أولي لأداة تطبيقك عندما تكون على شاشة القفل مع
السمة android:initialKeyguardLayout
. وهي تعمل بالطريقة نفسها المتّبعة في android:initialLayout
، إذ إنّها توفر
تخطيط يمكن أن يظهر فورًا إلى أن يتم إعداد أداة تطبيقك وتتمكّن من تحديث
التصميم.
لمزيد من المعلومات حول إنشاء تطبيقات مصغّرة لشاشة القفل، بما في ذلك إنشاء لتغيير حجم أداة تطبيقك عند ظهورها على شاشة القفل، يُرجى الاطّلاع على دليل أدوات التطبيقات.
عدة مستخدمين
يتيح Android الآن إنشاء مساحات متعدّدة للمستخدمين على الأجهزة القابلة للمشاركة، مثل الأجهزة اللوحية. كل مستخدم في جهازه مجموعة من الحسابات والتطبيقات وإعدادات النظام والملفات الخاصة به البيانات المرتبطة بالمستخدم.
بصفتك مطوّر تطبيقات، لا تحتاج إلى اتّخاذ أي إجراء مختلف لكي يعمل التطبيق. بشكل صحيح مع عدة مستخدمين على جهاز واحد. وبغض النظر عن عدد المستخدمين الذين قد يتواجدون في الجهاز، يتم فصل البيانات التي يحفظها تطبيقك لمستخدم معيّن عن البيانات التي يحفظها تطبيقك للمستخدمين الآخرين. يتتبع النظام بيانات المستخدم التي تنتمي إلى عملية المستخدم التي كان تطبيقك قيد التشغيل ويتيح له الوصول إلى بيانات هذا المستخدم فقط ولا يسمح له الوصول إلى بيانات المستخدمين الآخرين.
حفظ البيانات في بيئة متعددة المستخدمين
عندما يحفظ تطبيقك الإعدادات المفضّلة للمستخدم أو يُنشئ قاعدة بيانات أو يكتب ملفًا إلى المستخدم مساحة تخزين داخلية أو خارجية، لا يمكن الوصول إلى هذه البيانات إلا أثناء تشغيلها كمستخدم.
للتأكّد من أنّ تطبيقك يعمل بشكل صحيح في بيئة متعددة المستخدمين، لا تُشِر إلى دليل التطبيق الداخلي أو موقع وحدة التخزين الخارجية باستخدام مسارات غير قابلة للتغيير في البرنامج، وبدلاً من ذلك لواجهات برمجة التطبيقات المناسبة:
- للوصول إلى وحدة التخزين الداخلية، استخدِم
getFilesDir()
أوgetCacheDir()
أوopenFileOutput()
. - للوصول إلى وحدة التخزين الخارجية، استخدم
getExternalFilesDir()
أوgetExternalStoragePublicDirectory()
.
بغض النظر عن أي من واجهات برمجة التطبيقات هذه تستخدمها لحفظ البيانات لمستخدم معين، فلن يتم يمكن الوصول إليها أثناء تشغيلها كمستخدم مختلف. من منظور تطبيقك، يعمل كل مستخدم على جهاز منفصل تمامًا.
تحديد هوية المستخدمين في بيئة متعددة المستخدمين
إذا كان تطبيقك يريد تحديد مستخدمين فريدين، مثلاً لجمع إحصاءات أو إنشاء حساب آخر
من Google، فيجب عليك اتباع الممارسات الموصى بها لتحديد
عمليات التثبيت الفريدة. من خلال إنشاء UUID
جديدة عند بدء تشغيل تطبيقك
أنت متأكّد للمرة الأولى من أنّك ستحصل على معرّف فريد لتتبّع كلّ مستخدم، بغضّ النظر عن عدد
يثبِّت المستخدمون تطبيقك على جهاز واحد. بدلاً من ذلك، يمكنك حفظ رمز مميز محلي تم جلبه من
خادمك أو استخدام معرّف التسجيلات المقدم من خدمة مراسلة عبر السحابة الإلكترونية من Google.
يجب الانتباه إلى أنّه إذا طلب تطبيقك أحد معرّفات الأجهزة (مثل عنوان MAC لشبكة Wi-Fi).
العنوان أو رقم SERIAL
)، فستقدم القيمة نفسها لكل
المستخدم لأن هذه المعرّفات مرتبطة بالجهاز وليس بالمستخدم. ناهيك عن الآخر
المشكلات التي تقدمها هذه المعرّفات كما هو موضح في مقالة تحديد
مشاركة المدونة عن عمليات تثبيت التطبيقات
إعدادات عامة جديدة
تم تعديل إعدادات النظام لإتاحة العديد من المستخدمين مع إضافة Settings.Global
. تشبه مجموعة الإعدادات هذه إعدادات Settings.Secure
لأنّها للقراءة فقط، ولكن تنطبق بشكل عام على جميع المواقع الإلكترونية.
جميع مساحات المستخدمين على الجهاز.
تم نقل العديد من الإعدادات الحالية هنا من Settings.System
أو Settings.Secure
. إذا كان تطبيقك
جارٍ إجراء تغييرات حاليًا على الإعدادات المحدّدة سابقًا في Settings.System
(مثل AIRPLANE_MODE_ON
)، فيُفترض أن تتوقع ما يلي:
إجراء ذلك لن يعمل على جهاز يعمل بالإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث إذا تم ضبط هذه الإعدادات
تم نقل مهمة واحدة إلى Settings.Global
. يمكنك مواصلة قراءة الإعدادات المضبوطة على
Settings.Global
، ولكن لأنّ الإعدادات لم تعُد آمنة.
لتغيير التطبيقات، سيتعذّر إجراء ذلك تلقائيًا وسينشئ النظام تحذيرًا
سجلّ النظام عند تشغيل تطبيقك على Android 4.2 أو الإصدارات الأحدث.
دعم تنسيق من اليمين إلى اليسار
يوفر Android الآن العديد من واجهات برمجة التطبيقات التي تتيح لك إنشاء واجهات مستخدم بطريقة رشيقة تغيير اتجاه التنسيق لإتاحة اللغات التي تستخدم واجهات المستخدم من اليمين إلى اليسار (RTL) وميزة القراءة "، مثل العربية والعبرية.
لبدء استخدام تنسيقات من اليمين إلى اليسار في تطبيقك، يجب ضبط السمة android:supportsRtl
على العنصر <application>
في ملف البيان.
وتعيينه “true"
. عند تفعيل هذه الميزة، سيفعِّل النظام واجهات برمجة تطبيقات RTL مختلفة
لعرض تطبيقك بتنسيقات من اليمين إلى اليسار. على سبيل المثال، سيعرض شريط الإجراءات الرمز والعنوان
على الجانب الأيمن وأزرار الإجراءات على اليسار، وأي تخطيطات قمت بإنشائها باستخدام
سيتم أيضًا إلغاء صفوف View
التي يوفّرها إطار العمل.
إذا كنت بحاجة إلى تحسين مظهر التطبيق عند عرضه بتنسيق من اليمين إلى اليسار، هناك مستويان أساسيان للتحسين:
- تحويل خصائص التنسيق لليسار واليمين إلى تنسيق موجّه نحو البداية والنهاية
المواقع.
على سبيل المثال، استخدِم
android:layout_marginStart
. بدلاً منandroid:layout_marginLeft
وandroid:layout_marginEnd
بدلاً منandroid:layout_marginRight
.توفّر الفئة
RelativeLayout
أيضًا التنسيق المناسب. لاستبدال المواضع اليسرى/اليمنى، مثلandroid:layout_alignParentStart
إلى استبدالandroid:layout_alignParentLeft
وandroid:layout_toStartOf
بدلاً منandroid:layout_toLeftOf
- أو لتقديم تحسين كامل لتخطيطات من اليمين إلى اليسار، يمكنك توفير نماذج منفصلة تمامًا
تنسيق باستخدام مؤهِّل موارد
ldrtl
(يشيرldrtl
إلى segmentation-direction-right-to-left}). على سبيل المثال، يمكنك حفظ ملفات التنسيق الافتراضي فيres/layout/
وتنسيقات بتنسيق RTL محسَّنة فيres/layout-ldrtl/
يُعدّ مؤهِّل
ldrtl
مناسبًا للموارد القابلة للرسم ليكون بإمكانك تقديم الرسومات الموجّهة في الاتجاه المقابل لاتجاه القراءة.
تتوفر العديد من واجهات برمجة التطبيقات الأخرى عبر إطار العمل لدعم تخطيطات من اليمين إلى اليسار، كما هو الحال في
الفئة View
كي تتمكّن من تنفيذ السلوكيات الصحيحة المخصّصة
وفي Configuration
للاستعلام عن اتجاه التنسيق الحالي.
ملاحظة: إذا كنت تستخدم SQlite ولديك جداول أو أسماء أعمدة
و"الرقم فقط" يكون
حذر: يمكن أن يؤدي استخدام String.format(String, Object...)
إلى حدوث أخطاء حيث
تم تحويلها إلى اللغة العربية المكافئة لها إذا كان جهازك مضبوطًا على اللغة العربية.
يجب استخدام String.format(Locale,String,Object...)
للتأكد من أنّ الأرقام
على أنه ASCII. استخدام String.format("%d", int)
أيضًا بدلاً من استخدام
String.valueOf(int)
مقابل
تنسيق الأرقام.
أجزاء متداخلة
يمكنك الآن تضمين الأجزاء داخل الأجزاء. هذا مفيد لمجموعة متنوعة من المواقف في
الذي تريد وضع مكونات واجهة المستخدم الديناميكية والقابلة لإعادة الاستخدام في مكون واجهة المستخدم نفسه
ديناميكية وقابلة لإعادة الاستخدام. على سبيل المثال، إذا كنت تستخدم ViewPager
لإنشاء أجزاء تتحرّك يمينًا ويسارًا وتستهلك معظم مساحة الشاشة، يمكنك
والآن أدرِج أجزاءً في كل صفحة تجزئة.
لدمج جزء، ما عليك سوى استدعاء getChildFragmentManager()
على
Fragment
الذي تريد إضافة جزء فيه. يؤدي هذا الإجراء إلى عرض FragmentManager
يمكنك استخدامه كما تفعل عادةً من نشاط المستوى الأعلى.
لإنشاء معاملات مجزأة. على سبيل المثال، إليك بعض الرموز التي تضيف كسرًا من داخل
فئة Fragment
حالية:
Kotlin
val videoFragment = VideoPlayerFragment() childFragmentManager.beginTransaction().apply { add(R.id.video_fragment, videoFragment) commit() }
Java
Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit();
من داخل جزء مدمج، يمكنك الحصول على إشارة إلى الجزء الرئيسي من خلال استدعاء
getParentFragment()
تتيح Android Support Library الآن أيضًا استخدام الأجزاء المتداخلة، حتى تتمكن من تنفيذ الأجزاء المتداخلة تصميمات مجزأة على نظام التشغيل Android 1.6 والإصدارات الأحدث.
ملاحظة: لا يمكنك تضخيم تنسيق إلى جزء عند ذلك التنسيق.
يتضمّن <fragment>
. لا يتم دعم الأجزاء المتداخلة إلا عند إضافتها إلى
بشكل ديناميكي.
نص Renderscript
تم تحسين وظيفة احتساب Renderscript باستخدام الميزات التالية:
- العناصر الأساسية للنصوص البرمجية
يمكنك استخدام العناصر الأساسية المضمّنة في النص البرمجي في Renderscript والتي تنفذ العمليات المشتركة لك مثل:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
لاستخدام نص برمجي أساسي، يجب استدعاء طريقة
create()
الثابتة لكل كلمة أساسية لإنشاء مثيل للنص البرمجي. يمكنك بعد ذلك الاتصال بـset()
المتاح. لكل برنامج نصي أساسي لتعيين أي إدخالات وخيارات ضرورية. وأخيرًا، اختَر "forEach()
" لتنفيذ النص البرمجي.- مجموعات النصوص البرمجية
-
تتيح لك علامات
ScriptGroup
ربط سلسلة Renderscript ذات الصلة معًا. النصوص البرمجية وتنفيذها باستدعاء واحد.استخدِم
ScriptGroup.Builder
لإضافة جميع النصوص البرمجية إلى المجموعة. عبر الاتصال بـaddKernel()
. بمجرد وإضافة جميع النصوص البرمجية، وأنشئ الاتصالات بين النصوص البرمجية من خلال الاتصال بـaddConnection()
. عند الانتهاء من إضافة عمليات الربط، اتّصِل بالرقمcreate()
. لإنشاء مجموعة النصوص البرمجية. قبل تنفيذ مجموعة النصوص البرمجية، حدِّد المُدخل.Allocation
والنص البرمجي الأولي المطلوب تشغيله معsetInput(Script.KernelID, Allocation)
وتقديم المخرجاتAllocation
حيث تتم كتابة النتيجة إلى النص البرمجي النهائي إلى تم تنفيذها باستخدامsetOutput()
. أخيرًا، اتصلexecute()
لتشغيل مجموعة النصوص البرمجية. - نص الفلتر
-
تحدد عوامل التصفية القيود المفروضة على واجهات برمجة تطبيقات Renderscript الحالية التي تسمح بتشغيل التعليمة البرمجية الناتجة باستخدام مجموعة متنوعة من المعالجات (وحدات المعالجة المركزية (CPU) ووحدات معالجة الرسومات (GPU) ومعالجات الأجهزة الرقمية (DSP). لإنشاء ملفات filterscript، عليك إنشاء
.fs
. ملفات بدلاً من.rs
ملف، وتحديد#pragma rs_fp_relaxed
إلى إعلام وقت تشغيل Renderscript بأن النصوص البرمجية لا تتطلب دقة النقطة العائمة الصارمة من الإصدار IEEE 754-2008. وتتيح هذه الدقة انحدار صفر إلى الصفر مع الأواني المتنقلة وتقريبها من الصفر. بالإضافة إلى ذلك، قد يؤثر الفلتر يجب ألا تستخدم النصوص البرمجية أنواعًا مضمَّنة 32 بت ويجب أن تحدد دالة جذر مخصصة باستخدام__attribute__((kernel))
لأن filterscript لا تتوافق مع المؤشرات، التي يحدد التوقيع التلقائي للدالةroot()
.
ملاحظة: على الرغم من توفر دعم filterscript في النظام الأساسي، إلا أن المطوّر سيتوفّر الدعم في الإصدار 21.0.1 من أدوات SDK.
للحصول على عرض تفصيلي لجميع تغييرات واجهة برمجة التطبيقات في Android 4.2، يمكن الاطّلاع على تقرير اختلافات واجهة برمجة التطبيقات