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

يقدم Android 6.0 (M) ميزات جديدة للمستخدمين ومطوري التطبيقات. يقدم هذا المستند مقدمة لأهم واجهات برمجة التطبيقات.

بدء التطوير

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

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

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

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

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

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

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

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

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

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

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

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

  1. ثبِّت الإصدار 24.3 من أداة Android SDK Tools Revision، إذا لم يسبق لك تثبيتها.
  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 وفلتر النية باستخدام الإجراء 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. قد يطلب تطبيقك بعد ذلك من المستخدم التأكد من أنه يقصد هذا الإجراء.

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

واجهة برمجة التطبيقات الداعمة

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

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

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

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

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

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

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

لتصحيح أخطاء هذه الميزة، يمكنك تفعيل استخدام محرّك أقراص USB متصل بجهاز Android من خلال كابل USB أثناء التنقل (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.
  • بالنسبة إلى التطبيقات التي تستهدف Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات)، تعرض الطريقة getButtonState() BUTTON_STYLUS_PRIMARY عندما يضغط المستخدم على زر قلم الشاشة الأساسي. إذا كان قلم الشاشة يتضمّن زرًّا ثانيًا، تعرِض الطريقة نفسها BUTTON_STYLUS_SECONDARY عندما يضغط المستخدم عليه. إذا ضغط المستخدم على كلا الزرين في الوقت نفسه، ستعرض الطريقة كلتا القيمتين OR معًا (BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY).
  • بالنسبة إلى التطبيقات التي تستهدف إصدارًا أقدم من نظام التشغيل، تعرض طريقة getButtonState() العرض BUTTON_SECONDARY (للضغط على زرّ قلم الشاشة الأساسي)، أو BUTTON_TERTIARY (للضغط على زرّ قلم الشاشة الثانوي) أو كليهما.

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

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

دعم الإصدار 1 من نقطة الاتصال 2.0

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

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

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

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

قوائم ColorStateList القابلة للتعديل

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

ميزات الصوت

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

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

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

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

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

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

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

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

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

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

جارٍ إعادة معالجة واجهة برمجة التطبيقات

تمّ توسيع واجهة برمجة التطبيقات 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:

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

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

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