واجهات برمجة التطبيقات لنظام التشغيل 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 الأخرى، يمكنك مشاهدة الفيديو التالي: واجهتَا برمجة التطبيقات Fingerprint وPayment API.

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

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

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

واجهة برمجة التطبيقات Assist API

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

يمكن لتطبيقك اختيار عدم مشاركة السياق الحالي مع المساعد من خلال ضبط العلامة 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() جديدة تتيح لتطبيقاتك معرفة الإشعارات النشطة حاليًا

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

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

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

  • إذا لمس المستخدم قلمًا ستايلوس باستخدام زر على شاشة تطبيقك، ستُعرِض الطريقة getTooltype() القيمة TOOL_TYPE_STYLUS.
  • بالنسبة إلى التطبيقات التي تستهدف الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات)، تعرض الطريقة getButtonState() BUTTON_STYLUS_PRIMARY عندما يضغط المستخدم على زر قلم الشاشة الأساسي. إذا كان قلم الشاشة يحتوي على زر ثانٍ، ستؤدي الطريقة نفسها إلى عرض BUTTON_STYLUS_SECONDARY عندما يضغط المستخدم عليه. إذا ضغط المستخدم على كلا الزرَّين في الوقت نفسه، تعرض الطريقة كلا القيمتَين معًا باستخدام علامة OR (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() الجديدة إلى ما إذا كانت الشبكة التي تم رصدها represent a Hotspot 2.0 access point.

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

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

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

قوائم ColorStateLists التي يمكن تخصيصها حسب المظهر

أصبحت سمات المظهر متاحة الآن في 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 من دالة الاستدعاء هذه، ثم استخدِم الأسلوب new hasMicrophone().
  • طريقة getDevices() جديدة تتيح لك استرداد قائمة بجميع الأجهزة الصوتية المتصلة حاليًا بالنظام. يمكنك أيضًا تسجيل عنصر AudioDeviceCallback إذا كنت تريد أن يُرسِل النظام إشعارًا إلى تطبيقك عند اتصال جهاز صوتي أو انقطاع الاتصال به.

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

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

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

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

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

Flashlight API

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

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

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

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

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

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

إذا كنت تستخدم عنصرًا من النوع ImageWriter مع صورة PRIVATE، لا يمكن لتطبيقك الوصول إلى data الصورة مباشرةً. بدلاً من ذلك، يمكنك تمرير صورة 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 للأعمال". يمكنك الآن توفير الأجهزة من خلال "مالك جهاز" يجمع التطبيقات ويثبّتها بدون تدخل المستخدم. هذه الميزة مفيدة لتفعيل إعداد نقاط بيع الخدمة الذاتية أو الأجهزة المشابهة بنقرة واحدة بدون تفعيل حساب Google.
  • الوصول الصامت إلى شهادة المؤسسة: عندما يستدعي أحد التطبيقات choosePrivateKeyAlias()، قبل أن يُطلَب من المستخدم اختيار شهادة، يمكن الآن لمالك الملف الشخصي أو الجهاز استدعاء onChoosePrivateKeyAlias() لتوفير الاسم المعرِّف بصمت إلى التطبيق الذي يطلب ذلك. تتيح لك هذه الميزة منح التطبيقات المُدارة إذن الوصول إلى الشهادات بدون تفاعل المستخدم.
  • القبول التلقائي لتحديثات النظام: من خلال ضبط سياسة تحديث النظام باستخدام setSystemUpdatePolicy()، يمكن لمالك الجهاز الآن قبول تحديث النظام تلقائيًا، في حالة جهاز Kiosk مثلاً، أو تأجيل التحديث ومنع المستخدم من إجراء التحديث لمدة تصل إلى 30 يومًا. إضافةً إلى ذلك، يمكن للمشرف ضبط فترة زمنية يومية يجب فيها إجراء تحديث، على سبيل المثال أثناء الساعات التي لا يتم فيها استخدام جهاز Kiosk. عندما يكون تحديث النظام متاحًا، يتحقّق النظام مما إذا كان تطبيق "وحدة التحكّم بسياسة الجهاز" قد ضبط سياسة تحديث النظام، ويتّبع الإجراء وفقًا لذلك.
  • تثبيت الشهادات المفوَّضة: يمكن الآن لمالك الملف الشخصي أو الجهاز منح تطبيق تابع لجهة خارجية إمكانية طلب بيانات من DevicePolicyManager واجهات برمجة التطبيقات التالية المتعلّقة بإدارة الشهادات:
  • جهاز جوّال يعرض ميزة إشعارات حالة العمل ضمن برنامج Android for Work
  • تتبُّع استخدام البيانات: يمكن لأحد الملفات الشخصية أو لمالك الجهاز طلب البحث عن إحصاءات استخدام البيانات التي تظهر في الإعدادات > استخدام البيانات باستخدام طرق NetworkStatsManager الجديدة. يحصل مالكو الملفات الشخصية تلقائيًا على permissão للعثور على البيانات في الملف الشخصي الذي يديرونه، في حين يحصل مالكو الأجهزة على إذن بالوصول إلى بيانات الاستخدام للمستخدم الأساسي المُدار.
  • إدارة أذونات وقت التشغيل:

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

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