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

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

بدء التطوير

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

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

لتحسين أداء تطبيقك على الأجهزة التي تعمل بنظام التشغيل 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 من الإصدار 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. قد يطلب تطبيقك من المستخدم بعد ذلك تأكيد أنه كان يقصد هذا الإجراء.

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

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

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

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

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

  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 (للضغط على زر قلم الشاشة الثانوي) أو كليهما.

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

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

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

يتيح هذا الإصدار مواصفات الإصدار 1 من Hotspot 2.0 1 على أجهزة 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 قد تعرض المحتوى بدرجة الدقة الأصلية.

قوائم ColorStates القابلة للضبط

تتوفّر سمات المظاهر الآن في 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:

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

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

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