واجهات برمجة التطبيقات لنظام التشغيل Android 6.0

يتضمّن الإصدار 6.0 من نظام التشغيل Android (M) ميزات جديدة للمستخدمين ومطوّري التطبيقات. يقدّم هذا المستند مقدمة حول أهم واجهات برمجة التطبيقات.

ابدأ التطوير

لبدء إنشاء تطبيقات متوافقة مع الإصدار 6.0 من نظام التشغيل Android، عليك أولاً الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android. بعد ذلك، استخدِم SDK Manager لتنزيل حزمة تطوير البرامج (SDK) لنظام التشغيل Android 6.0 وصور النظام.

تحديث مستوى واجهة برمجة التطبيقات المستهدَف

لتحسين تطبيقك بشكل أفضل على الأجهزة التي تعمل بنظام التشغيل Android، اضبط targetSdkVersion على "23"، ثم ثبِّت تطبيقك على صورة نظام Android، واختبِره، ثم انشر التطبيق المعدَّل مع هذا التغيير.

يمكنك استخدام واجهات برمجة التطبيقات لنظام التشغيل Android مع إتاحة الإصدارات القديمة أيضًا من خلال إضافة شروط إلى الرمز البرمجي تتحقّق من مستوى واجهة برمجة التطبيقات للنظام قبل تنفيذ واجهات برمجة التطبيقات غير المتوافقة مع minSdkVersion. لمزيد من المعلومات حول الحفاظ على التوافق مع الإصدارات القديمة، يُرجى قراءة التوافق مع إصدارات مختلفة من النظام الأساسي.

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

المصادقة ببصمة الإصبع

يوفّر هذا الإصدار واجهات برمجة تطبيقات جديدة تتيح لك مصادقة المستخدمين من خلال استخدام عمليات فحص بصمات الأصابع على الأجهزة المتوافقة. استخدِم هذه الواجهات مع نظام Android Keystore.

لمصادقة المستخدمين من خلال فحص بصمة الإصبع، احصل على مثيل للفئة الجديدة FingerprintManager واستدعِ طريقة authenticate(). يجب أن يكون تطبيقك مثبّتًا على جهاز متوافق مزوّد بأداة استشعار بصمة الإصبع. يجب تنفيذ واجهة المستخدم الخاصة بعملية مصادقة بصمة الإصبع في تطبيقك، واستخدام رمز بصمة الإصبع العادي في Android في واجهة المستخدم. يتم تضمين رمز بصمة الإصبع على Android (c_fp_40px.png) في نموذج المصادقة بالمقاييس الحيوية. إذا كنت بصدد تطوير تطبيقات متعددة تستخدم مصادقة بصمة الإصبع، يُرجى العِلم أنّه يجب أن يصادق كل تطبيق على بصمة إصبع المستخدم بشكل مستقل.

لاستخدام هذه الميزة في تطبيقك، عليك أولاً إضافة إذن USE_FINGERPRINT في ملف البيان.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
هاتف جوّال يعرض وظيفة المصادقة ببصمة الإصبع

للاطّلاع على مثال على تنفيذ المصادقة ببصمة الإصبع في تطبيق، راجِع نموذج المصادقة بالمقاييس الحيوية. للاطّلاع على عرض توضيحي حول كيفية استخدام واجهات برمجة التطبيقات الخاصة بالمصادقة هذه مع واجهات برمجة تطبيقات Android الأخرى، شاهِد الفيديو واجهات برمجة التطبيقات الخاصة ببصمة الإصبع والدفع.

في حال كنت تختبر هذه الميزة، اتّبِع الخطوات التالية:

  1. ثبِّت الإصدار 24.3 من "أدوات حزمة تطوير البرامج لنظام التشغيل Android" إذا لم يسبق لك ذلك.
  2. سجِّل بصمة إصبع جديدة في المحاكي من خلال الانتقال إلى الإعدادات > الأمان > بصمة الإصبع، ثم اتّبِع تعليمات التسجيل.
  3. استخدِم محاكيًا لمحاكاة أحداث اللمس ببصمة الإصبع باستخدام الأمر التالي. استخدِم الأمر نفسه لمحاكاة أحداث اللمس ببصمة الإصبع على شاشة القفل أو في تطبيقك.
    adb -e emu finger touch <finger_id>
    

    على نظام التشغيل Windows، قد تحتاج إلى تشغيل telnet 127.0.0.1 <emulator-id> ثم finger touch <finger_id>.

تأكيد بيانات الاعتماد

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

لضبط مدة المهلة التي يمكن خلالها إعادة استخدام المفتاح نفسه بعد مصادقة المستخدم بنجاح، استدعِ طريقة setUserAuthenticationValidityDurationSeconds() الجديدة عند إعداد KeyGenerator أو KeyPairGenerator.

تجنَّب عرض مربّع حوار إعادة المصادقة بشكل مفرط، إذ يجب أن تحاول تطبيقاتك استخدام العنصر المشفر أولاً، وإذا انتهت مهلة الانتظار، استخدِم طريقة createConfirmDeviceCredentialIntent() لإعادة مصادقة المستخدم داخل تطبيقك.

ربط التطبيقات

يحسّن هذا الإصدار نظام الأهداف في Android من خلال توفير ربط أكثر فعالية للتطبيقات. تتيح لك هذه الميزة ربط تطبيق بنطاق ويب تملكه. واستنادًا إلى هذا الربط، يمكن للنظام الأساسي تحديد التطبيق التلقائي الذي سيتم استخدامه للتعامل مع رابط ويب معيّن وتخطّي مطالبة المستخدمين باختيار تطبيق. لمعرفة كيفية تنفيذ هذه الميزة، راجِع التعامل مع روابط التطبيقات.

الاحتفاظ التلقائي بنسخة احتياطية للتطبيقات

يُجري النظام الآن عملية الاحتفاظ بنسخة احتياطية كاملة من بيانات التطبيقات واستعادتها تلقائيًا. يجب أن يستهدف تطبيقك الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) لتفعيل هذا السلوك، ولن تحتاج إلى إضافة أي رمز إضافي. إذا حذف المستخدمون حساباتهم على Google، سيتم أيضًا حذف بيانات النسخ الاحتياطية. للتعرّف على طريقة عمل هذه الميزة وكيفية ضبط المحتوى الذي سيتم الاحتفاظ بنسخة احتياطية منه في نظام الملفات، يمكنك الاطّلاع على مقالة ضبط ميزة "الاحتفاظ التلقائي بنسخة احتياطية" للتطبيقات.

المشاركة المباشرة

الجزء السفلي من جهاز جوّال يعرض وظيفة &quot;المشاركة المباشرة&quot;

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

لتفعيل أهداف المشاركة المباشرة، يجب تحديد فئة توسّع الفئة ChooserTargetService. عليك تعريف خدمتك في البيان. ضمن هذا البيان، حدِّد إذن ‎BIND_CHOOSER_TARGET_SERVICE وintent filter باستخدام الإجراء ‎SERVICE_INTERFACE.

يوضّح المثال التالي كيفية تعريف ChooserTargetService في ملف البيان.

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

لكل نشاط تريد عرضه على ChooserTargetService، أضِف عنصر <meta-data> بالاسم "android.service.chooser.chooser_target_service" في بيان تطبيقك.

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

التفاعلات الصوتية

يوفّر هذا الإصدار واجهة برمجة تطبيقات جديدة للتفاعل الصوتي، والتي تتيح لك، إلى جانب الإجراءات الصوتية، إنشاء تجارب صوتية حوارية في تطبيقاتك. استدعِ طريقة isVoiceInteraction() لتحديد ما إذا كان إجراء صوتي قد فعّل نشاطك. في هذه الحالة، يمكن لتطبيقك استخدام الفئة VoiceInteractor لطلب تأكيد صوتي من المستخدم، والاختيار من قائمة خيارات، وغير ذلك.

تنشأ معظم التفاعلات الصوتية من إجراء صوتي يتخذه المستخدم. ومع ذلك، يمكن أن يبدأ نشاط التفاعل الصوتي أيضًا بدون بيانات أدخلها المستخدم. على سبيل المثال، يمكن لتطبيق آخر تم تشغيله من خلال تفاعل صوتي أن يرسل أيضًا هدفًا لتشغيل تفاعل صوتي. لتحديد ما إذا كان نشاطك قد بدأ من خلال طلب بحث صوتي من المستخدم أو من تطبيق آخر للتفاعل الصوتي، يمكنك استدعاء الطريقة isVoiceInteractionRoot(). إذا أطلق تطبيق آخر نشاطك، ستعرض الطريقة القيمة false. بعد ذلك، قد يطلب تطبيقك من المستخدم تأكيد أنّه أراد تنفيذ هذا الإجراء.

لمزيد من المعلومات حول تنفيذ الإجراءات الصوتية، يمكنك الاطّلاع على موقع &quot;الإجراءات الصوتية&quot; الإلكتروني المخصّص للمطوّرين.

Assist API

يوفّر هذا الإصدار طريقة جديدة للمستخدمين للتفاعل مع تطبيقاتك من خلال مساعد. لاستخدام هذه الميزة، يجب أن يسمح المستخدم للمساعد باستخدام السياق الحالي. بعد تفعيل الميزة، يمكن للمستخدم استدعاء &quot;مساعد Google&quot; من أي تطبيق من خلال الضغط مع الاستمرار على زر الصفحة الرئيسية.

يمكن لتطبيقك اختيار عدم مشاركة السياق الحالي مع المساعد من خلال ضبط العلامة FLAG_SECURE. بالإضافة إلى مجموعة المعلومات العادية التي تنقلها المنصة إلى المساعد، يمكن لتطبيقك مشاركة معلومات إضافية باستخدام فئة AssistContent الجديدة.

لتقديم سياق إضافي للمساعد من تطبيقك، اتّبِع الخطوات التالية:

  1. تنفيذ واجهة Application.OnProvideAssistDataListener
  2. سجِّل أداة معالجة الأحداث هذه باستخدام registerOnProvideAssistDataListener().
  3. لتوفير معلومات سياقية خاصة بالنشاط، عليك تجاهل onProvideAssistData() الدالة الإرجاعية، ويمكنك أيضًا تجاهل onProvideAssistContent() الدالة الإرجاعية الجديدة.

أجهزة التخزين القابلة للاستخدام

يتيح هذا الإصدار للمستخدمين استخدام أجهزة التخزين الخارجية، مثل بطاقات SD. عند اعتماد جهاز تخزين خارجي، يتم تشفير الجهاز وتنسيقه ليعمل كوحدة تخزين داخلية. تتيح هذه الميزة للمستخدمين نقل التطبيقات والبيانات الخاصة بها بين أجهزة التخزين. عند نقل التطبيقات، يلتزم النظام بالإعداد المفضّل android:installLocation في البيان.

إذا كان تطبيقك يصل إلى واجهات برمجة التطبيقات أو الحقول التالية، يُرجى العِلم أنّ مسارات الملفات التي تعرضها ستتغيّر بشكل ديناميكي عند نقل التطبيق بين أجهزة التخزين الداخلية والخارجية. عند إنشاء مسارات الملفات، ننصحك بشدة باستخدام واجهات برمجة التطبيقات هذه بشكل ديناميكي دائمًا. لا تستخدِم مسارات ملفات مبرمَجة أو تحتفظ بمسارات ملفات مؤهَّلة بالكامل تم إنشاؤها سابقًا.

لتصحيح أخطاء هذه الميزة، يمكنك تفعيل إمكانية استخدام محرّك أقراص USB متصل بجهاز Android من خلال كابل USB On-The-Go (OTG)‎، وذلك عن طريق تنفيذ الأمر التالي:

$ adb shell sm set-force-adoptable true

الإشعارات

يضيف هذا الإصدار التغييرات التالية على واجهة برمجة التطبيقات للإشعارات:

  • مستوى فلتر جديد INTERRUPTION_FILTER_ALARMS يتوافق مع وضع المنبّهات فقط الجديد في ميزة "عدم الإزعاج".
  • قيمة فئة CATEGORY_REMINDER الجديدة التي تُستخدَم للتمييز بين التذكيرات التي يضبطها المستخدم والأحداث الأخرى (CATEGORY_EVENT) والمنبّهات (CATEGORY_ALARM).
  • فئة Icon جديدة يمكنك إرفاقها بإشعاراتك باستخدام الطريقتَين setSmallIcon() وsetLargeIcon(). وبالمثل، يقبل الإجراء addAction() الآن عنصر Icon بدلاً من معرّف مورد قابل للرسم.
  • طريقة getActiveNotifications() جديدة تتيح لتطبيقاتك معرفة الإشعارات النشطة حاليًا.

التوافق مع قلم الشاشة الذي يعمل بالبلوتوث

يوفر هذا الإصدار دعمًا محسّنًا لبيانات أدخلها المستخدم باستخدام قلم بلوتوث. يمكن للمستخدمين إقران قلم بلوتوث متوافق وتوصيله بهاتفهم أو جهازهم اللوحي. أثناء الاتصال، يتم دمج معلومات الموضع من شاشة اللمس مع معلومات الضغط والأزرار من القلم لتقديم نطاق تعبير أكبر من شاشة اللمس وحدها. يمكن لتطبيقك الاستماع إلى ضغطات زر القلم وتنفيذ إجراءات ثانوية من خلال تسجيل العنصرين View.OnContextClickListener وGestureDetector.OnContextClickListener في نشاطك.

استخدِم طرق MotionEvent والثوابت لرصد تفاعلات زر القلم:

  • إذا لمس المستخدم قلمًا مزوّدًا بزر على شاشة تطبيقك، ستعرض الطريقة getTooltype() القيمة TOOL_TYPE_STYLUS.
  • بالنسبة إلى التطبيقات التي تستهدف الإصدار 6.0 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 23)، تعرض getButtonState() الطريقة BUTTON_STYLUS_PRIMARY عندما يضغط المستخدم على زر قلم الشاشة الأساسي. إذا كان القلم مزوّدًا بزر ثانٍ، تعرض الطريقة نفسها القيمة BUTTON_STYLUS_SECONDARY عندما يضغط المستخدم عليه. إذا ضغط المستخدم على الزرّين معًا، ستعرض الطريقة القيمتين معًا (BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY).
  • بالنسبة إلى التطبيقات التي تستهدف إصدارًا أقدم من النظام الأساسي، تعرض الطريقة getButtonState() القيمة BUTTON_SECONDARY (عند الضغط على زر القلم الأساسي) أو BUTTON_TERTIARY (عند الضغط على زر القلم الثانوي) أو كليهما.

تحسين البحث عن أجهزة بلوتوث منخفض الطاقة

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

توافق الإصدار 1 من Hotspot 2.0

يتيح هذا الإصدار استخدام مواصفات الإصدار 1 من Hotspot 2.0 على أجهزة Nexus 6 وNexus 9. لتوفير بيانات اعتماد Hotspot 2.0 في تطبيقك، استخدِم الطرق الجديدة للفئة WifiEnterpriseConfig، مثل setPlmn() وsetRealm(). في العنصر WifiConfiguration، يمكنك ضبط الحقلين FQDN وproviderFriendlyName. تشير طريقة isPasspointNetwork() الجديدة إلى ما إذا كانت الشبكة التي تم رصدها تمثّل نقطة وصول Hotspot 2.0.

وضع العرض بدقة 4K

تتيح المنصة الآن للتطبيقات طلب ترقية دقة العرض إلى 4K على الأجهزة المتوافقة. للاستعلام عن الدقة المادية الحالية، استخدِم واجهات برمجة التطبيقات الجديدة Display.Mode. إذا تم عرض واجهة المستخدم بدقة منطقية أقل وتمت ترقيتها إلى دقة مادية أكبر، يُرجى العِلم أنّ الدقة المادية التي تعرضها الطريقة getPhysicalWidth() قد تختلف عن الدقة المنطقية التي تعرضها getSize().

يمكنك أن تطلب من النظام تغيير الدقة المادية في تطبيقك أثناء تشغيله، وذلك من خلال ضبط السمة preferredDisplayModeId لنافذة تطبيقك. تكون هذه الميزة مفيدة إذا كنت تريد التبديل إلى دقة عرض 4K. أثناء عرض المحتوى بدقة 4K، يستمر عرض واجهة المستخدم بالدقة الأصلية (مثل 1080p) ويتم تحسينها إلى 4K، ولكن قد تعرض عناصر SurfaceView المحتوى بالدقة الأصلية.

Themeable ColorStateLists

تتوفّر الآن سمات المظهر في ColorStateList للأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات). تم إيقاف الطريقتَين Resources.getColorStateList() وResources.getColor() نهائيًا. إذا كنت تستدعي واجهات برمجة التطبيقات هذه، استدعِ الطريقتَين الجديدتَين Context.getColorStateList() أو Context.getColor() بدلاً من ذلك. تتوفّر هذه الطرق أيضًا في مكتبة appcompat الإصدار 4 من خلال ContextCompat.

الميزات الصوتية

يضيف هذا الإصدار تحسينات على معالجة الصوت على Android، بما في ذلك:

  • إتاحة بروتوكول MIDI باستخدام واجهات برمجة التطبيقات الجديدة android.media.midi استخدِم واجهات برمجة التطبيقات هذه لإرسال أحداث MIDI واستلامها.
  • فئتا AudioRecord.Builder وAudioTrack.Builder الجديدتان لإنشاء عناصر تسجيل وتشغيل الصوت الرقمي على التوالي، وإعداد خصائص مصدر الصوت ومستقبله لتجاوز الإعدادات التلقائية للنظام
  • نقاط ربط واجهة برمجة التطبيقات لربط أجهزة الصوت والإدخال ويكون هذا الإجراء مفيدًا بشكل خاص إذا كان تطبيقك يتيح للمستخدمين بدء بحث صوتي من خلال ذراع التحكّم في الألعاب أو جهاز تحكّم عن بُعد متصل بجهاز Android TV. يستدعي النظام الدالة الجديدة onSearchRequested() عندما يبدأ المستخدم عملية بحث. لتحديد ما إذا كان جهاز الإدخال الخاص بالمستخدم يتضمّن ميكروفونًا مدمجًا، استرجِع العنصر InputDevice من دالة معاودة الاتصال هذه، ثم استدعِ طريقة hasMicrophone() الجديدة.
  • طريقة getDevices() جديدة تتيح لك استرداد قائمة بجميع أجهزة الصوت المتصلة حاليًا بالنظام. يمكنك أيضًا تسجيل AudioDeviceCallback كائن إذا كنت تريد أن يرسل النظام إشعارًا إلى تطبيقك عند توصيل جهاز صوتي أو فصله.

ميزات الفيديو

يضيف هذا الإصدار إمكانات جديدة إلى واجهات برمجة التطبيقات لمعالجة الفيديو، بما في ذلك:

  • فئة MediaSync جديدة تساعد التطبيقات في عرض بث الصوت والفيديو بشكل متزامن. يتم إرسال مخازن الصوت المؤقتة بطريقة غير حظر ويتم عرضها من خلال دالة رد الاتصال. يتيح أيضًا سرعة تشغيل ديناميكية.
  • حدث EVENT_SESSION_RECLAIMED جديد، يشير إلى أنّ مدير الموارد استعاد جلسة فتحها التطبيق. إذا كان تطبيقك يستخدم جلسات إدارة الحقوق الرقمية (DRM)، عليك التعامل مع هذا الحدث والتأكّد من عدم استخدام جلسة تمت استعادتها.
  • رمز الخطأ الجديد ERROR_RECLAIMED، الذي يشير إلى أنّ مدير الموارد استردّ مورد الوسائط الذي يستخدمه برنامج الترميز. وباستثناء ذلك، يجب تحرير برنامج الترميز، لأنّه انتقل إلى حالة نهائية.
  • واجهة getMaxSupportedInstances() جديدة للحصول على تلميح بشأن الحد الأقصى لعدد مثيلات الترميز المتزامنة المتوافقة.
  • طريقة setPlaybackParams() جديدة لضبط سرعة تشغيل الوسائط لتشغيلها بسرعة أو ببطء تعمل هذه الميزة أيضًا على تمديد أو تسريع تشغيل الصوت تلقائيًا بالتزامن مع الفيديو.

ميزات الكاميرا

يتضمّن هذا الإصدار واجهات برمجة التطبيقات الجديدة التالية للوصول إلى ضوء الفلاش في الكاميرا ولإعادة معالجة الصور في الكاميرا:

Flashlight API

إذا كان جهاز الكاميرا يحتوي على وحدة فلاش، يمكنك استدعاء طريقة setTorchMode() لتبديل وضع المصباح لوحدة الفلاش بين التشغيل والإيقاف بدون فتح جهاز الكاميرا. لا يملك التطبيق حق الملكية الحصرية لوحدة الفلاش أو جهاز الكاميرا. يتم إيقاف وضع المصباح ويصبح غير متاح عندما يصبح جهاز الكاميرا غير متاح، أو عندما تصبح موارد الكاميرا الأخرى التي تبقي المصباح مضاءً غير متاحة. يمكن للتطبيقات الأخرى أيضًا طلب setTorchMode() لإيقاف وضع المصباح اليدوي. عند إغلاق آخر تطبيق تم فيه تفعيل وضع المصباح اليدوي، يتم إيقاف هذا الوضع.

يمكنك تسجيل دالة رد اتصال لتلقّي إشعار بشأن حالة وضع المصباح عن طريق استدعاء الطريقة registerTorchCallback(). عند تسجيل دالة الاستدعاء للمرة الأولى، يتم استدعاؤها على الفور مع حالة وضع المصباح اليدوي لجميع أجهزة الكاميرا المعروفة حاليًا التي تتضمّن وحدة فلاش. في حال تم تفعيل وضع المصباح أو إيقافه بنجاح، يتم استدعاء طريقة onTorchModeChanged().

Reprocessing API

تمت إضافة دعم إلى واجهة برمجة التطبيقات Camera2 لتتيح إعادة معالجة الصور بتنسيق YUV وتنسيق خاص غير شفاف. لتحديد ما إذا كانت إمكانات إعادة المعالجة هذه متاحة، اتّصِل بالدالة getCameraCharacteristics() وابحث عن المفتاح REPROCESS_MAX_CAPTURE_STALL. إذا كان الجهاز يتيح إعادة المعالجة، يمكنك إنشاء جلسة التقاط بيانات من الكاميرا قابلة لإعادة المعالجة من خلال استدعاء createReprocessableCaptureSession()، وإنشاء طلبات لإعادة معالجة المخزن المؤقت للإدخال.

استخدِم الفئة ImageWriter لربط تدفق المخزن المؤقت للإدخال بإدخال إعادة المعالجة للكاميرا. للحصول على مخزن مؤقت فارغ، اتّبِع نموذج البرمجة التالي:

  1. استدعِ طريقة dequeueInputImage().
  2. املأ البيانات في مخزن الإدخال المؤقت.
  3. أرسِل المخزن المؤقت إلى الكاميرا من خلال استدعاء طريقة queueInputImage().

إذا كنت تستخدم عنصر ImageWriter مع صورة PRIVATE، لا يمكن لتطبيقك الوصول إلى بيانات الصورة مباشرةً. بدلاً من ذلك، مرِّر صورة PRIVATE مباشرةً إلى ImageWriter من خلال استدعاء طريقة queueInputImage() بدون أي نسخة من المخزن المؤقت.

تتيح الفئة ImageReader الآن استخدام تنسيق PRIVATE لتدفّقات صور. تتيح هذه الميزة لتطبيقك الاحتفاظ بقائمة انتظار دائرية لصور الإخراج تضم ImageReader صورة، واختيار صورة واحدة أو أكثر، وإرسالها إلى ImageWriter لإعادة معالجة الكاميرا.

ميزات Android for Work

يتضمّن هذا الإصدار واجهات برمجة التطبيقات الجديدة التالية لنظام Android for Work:

  • عناصر تحكّم محسّنة للأجهزة المملوكة للشركة والمخصّصة للاستخدام الفردي: يمكن لمالك الجهاز الآن التحكّم في الإعدادات التالية لتحسين إدارة الأجهزة المملوكة للشركة والمخصّصة للاستخدام الفردي (COSU):
    • يمكنك إيقاف قفل المفاتيح أو إعادة تفعيله باستخدام الطريقة setKeyguardDisabled().
    • يمكنك إيقاف شريط الحالة أو إعادة تفعيله (بما في ذلك الإعدادات السريعة والإشعارات والإيماءة السريعة للأعلى على شريط التنقّل التي تفتح Google Now) باستخدام الطريقة setStatusBarDisabled().
    • إيقاف التشغيل الآمن أو إعادة تفعيله باستخدام الثابت UserManager DISALLOW_SAFE_BOOT.
    • منع إطفاء الشاشة أثناء توصيل الجهاز بالشاحن باستخدام الثابت STAY_ON_WHILE_PLUGGED_IN
  • التثبيت والإلغاء الصامتان للتطبيقات من خلال "مالك الجهاز": يمكن الآن لـ "مالك الجهاز" تثبيت التطبيقات وإلغاء تثبيتها بشكل صامت باستخدام واجهات برمجة التطبيقات PackageInstaller، بغض النظر عن Google Play for Work. يمكنك الآن توفير المتطلبات اللازمة للأجهزة من خلال مالك الجهاز الذي يجلب التطبيقات ويثبّتها بدون تدخل المستخدم. تكون هذه الميزة مفيدة لتفعيل عملية الإعداد بنقرة واحدة لأجهزة Kiosk أو غيرها من الأجهزة المشابهة بدون تفعيل حساب Google.
  • الوصول إلى شهادة المؤسسة بدون إشعار: عندما يطلب تطبيق choosePrivateKeyAlias()، قبل أن يُطلب من المستخدم اختيار شهادة، يمكن لمالك الملف الشخصي أو مالك الجهاز الآن طلب الطريقة onChoosePrivateKeyAlias() لتوفير الاسم المستعار بدون إشعار للتطبيق الذي يطلب ذلك. تتيح لك هذه الميزة منح التطبيقات المُدارة إذن الوصول إلى الشهادات بدون تفاعل المستخدم.
  • قبول تحديثات النظام تلقائيًا: من خلال ضبط سياسة تحديث النظام باستخدام setSystemUpdatePolicy()، يمكن لمالك الجهاز الآن قبول تحديث النظام تلقائيًا، على سبيل المثال في حالة جهاز Kiosk، أو تأجيل التحديث ومنع المستخدم من تنفيذه لمدة تصل إلى 30 يومًا. بالإضافة إلى ذلك، يمكن للمشرف تحديد فترة زمنية يومية يجب خلالها إجراء التحديث، مثلاً خلال الساعات التي لا يكون فيها جهاز kiosk قيد الاستخدام. عند توفّر تحديث للنظام، يتحقّق النظام مما إذا كان تطبيق وحدة التحكّم بسياسة الجهاز قد ضبط سياسة تحديث النظام، ويتصرّف وفقًا لذلك.
  • تفويض تثبيت الشهادات: يمكن لمالك الملف الشخصي أو الجهاز الآن منح تطبيق خارجي إذنًا لاستخدام واجهات برمجة التطبيقات DevicePolicyManager لإدارة الشهادات:
  • جهاز جوّال يعرض ميزة إشعار حالة العمل ضمن Android for Work
  • تتبُّع استخدام البيانات: يمكن لمالك الملف الشخصي أو الجهاز الآن طلب إحصاءات استخدام البيانات الظاهرة في الإعدادات > استخدام البيانات باستخدام طريقتَي NetworkStatsManager الجديدتَين. يتم تلقائيًا منح &quot;مالكي الملفات الشخصية&quot; إذنًا بالبحث عن البيانات في الملف الشخصي الذي يديرونه، بينما يحصل &quot;مالكو الأجهزة&quot; على إذن بالوصول إلى بيانات استخدام المستخدم الأساسي المُدار.
  • إدارة أذونات التشغيل:

    يمكن لمالك الملف الشخصي أو الجهاز ضبط سياسة أذونات لجميع طلبات أذونات التشغيل التي تقدمها جميع التطبيقات باستخدام setPermissionPolicy()، وذلك إما من خلال مطالبة المستخدم بمنح الإذن أو من خلال منح الإذن أو رفضه تلقائيًا بدون إعلام المستخدم. في حال ضبط السياسة الأخيرة، لا يمكن للمستخدم تعديل الاختيار الذي أجراه مالك الملف الشخصي أو الجهاز ضمن شاشة أذونات التطبيق في الإعدادات.

  • شبكة VPN في الإعدادات: أصبحت تطبيقات شبكة VPN ظاهرة في الإعدادات > المزيد > شبكة VPN. بالإضافة إلى ذلك، أصبحت الإشعارات المصاحبة لاستخدام شبكة VPN خاصة بطريقة ضبط هذه الشبكة. بالنسبة إلى "مالك الملف الشخصي"، تكون الإشعارات خاصة بما إذا تم ضبط شبكة VPN لملف مُدار أو ملف شخصي أو كليهما. بالنسبة إلى مالك الجهاز، تكون الإشعارات خاصة بما إذا تم ضبط شبكة VPN للجهاز بأكمله.
  • إشعار حالة العمل: يظهر الآن رمز حقيبة أوراق في شريط الحالة عندما يكون هناك نشاط في المقدّمة لتطبيق من ملف العمل المُدار. بالإضافة إلى ذلك، إذا تم فتح قفل الجهاز مباشرةً للانتقال إلى نشاط أحد التطبيقات في الملف الشخصي المُدار، سيظهر إشعار قصير للمستخدم لإعلامه بأنّه داخل ملف العمل.