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

مستوى واجهة برمجة التطبيقات: 14

Android 4.0 (ICE_CREAM_SANDWICH) هو إصدار رئيسي لنظام التشغيل يضيف مجموعة متنوعة من الميزات الجديدة للمستخدمين والتطبيقات المطورين. إلى جانب جميع الميزات وواجهات برمجة التطبيقات الجديدة التي تتم مناقشتها أدناه، يُعد Android 4.0 مهمًا إصدار النظام الأساسي لأنه يوفّر مجموعة شاملة من واجهات برمجة التطبيقات ومظاهر الصور الثلاثية الأبعاد من Android 3.x إلى شاشات أصغر. بصفتك مطوّر تطبيقات، أصبح لديك الآن نظام أساسي واحد وإطار عمل موحّد لواجهة برمجة التطبيقات التي تمكّنك من تطوير تطبيقك ونشره باستخدام حزمة APK واحدة توفر تجربة مستخدم محسّنة للهواتف المحمولة والأجهزة اللوحية وغيرها، عند تشغيل نفس الإصدار من نظام التشغيل Android: الإصدار 4.0 (المستوى 14 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث

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

نظرة عامة على واجهة برمجة التطبيقات

تقدم الأقسام أدناه نظرة عامة فنية على واجهات برمجة التطبيقات الجديدة في Android 4.0.

واجهات برمجة التطبيقات الاجتماعية في مقدِّم جهات الاتصال

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

الملف الشخصي للمستخدم

يتضمّن Android الآن ملفًا شخصيًا يمثّل مالك الجهاز، على النحو المحدّد في جدول ContactsContract.Profile. التطبيقات الاجتماعية التي تحافظ على هوية المستخدم يمكن أن تساهم في بيانات الملف الشخصي للمستخدم من خلال إنشاء إدخال ContactsContract.RawContacts جديد في ContactsContract.Profile. وهذا يعني أن جهات الاتصال الأولية التي تمثل مستخدم الجهاز لا تنتمي إلى جدول جهات الاتصال الأولية التقليدية التي يحددها معرّف الموارد المنتظم (URI) ContactsContract.RawContacts؛ بدلاً من ذلك، يجب إضافة جهة اتصال أولية للملف الشخصي في الجدول في CONTENT_RAW_CONTACTS_URI. خام يتم بعد ذلك تجميع جهات الاتصال في هذا الجدول في ملف شخصي واحد مرئي للمستخدم ويسمى "أنا".

تتطلب إضافة جهة اتصال أولية جديدة للملف الشخصي ما يلي: الإذن android.Manifest.permission#WRITE_PROFILE. وبالمثل، لتتمكن من قراءتها من الملف الشخصي يجب طلب الإذن android.Manifest.permission#READ_PROFILE. ومع ذلك، معظم التطبيقات لا ينبغي أن تحتاج إلى قراءة ملف المستخدم الشخصي، حتى عند المساهمة بالبيانات في بك. قراءة الملف الشخصي للمستخدم هي إذن حسّاس ويجب أن تتوقّع أن يكون المستخدمون الشك في التطبيقات التي تطلب ذلك.

نيّة الدعوة

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

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

الصور الكبيرة الحجم

يتيح Android الآن استخدام الصور العالية الدقة لجهات الاتصال. الآن، عندما تدفع صورة إلى سجل جهات الاتصال، يعالجه النظام إلى صورة مصغّرة بحجم 96×96 (كما في السابق) 256×256 "صورة معروضة" يتم تخزينها في متجر صور جديد مستند إلى الملفات (الأبعاد الدقيقة التي قد تختلف اختيارات النظام في المستقبل). يمكنك إضافة صورة كبيرة إلى جهة اتصال من خلال وضع صورة في عمود PHOTO المعتاد من صف البيانات، والذي سيعالجه النظام بعد ذلك في الصورة المصغّرة المناسبة ويعرض السجلات.

ملاحظات حول استخدام جهات الاتصال

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

موفِّر التقويم

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

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

نموذج البيانات للتقاويم والمعلومات المتعلقة بالحدث في "موفِّر التقويم" هو المحددة بواسطة CalendarContract. يتم تخزين جميع بيانات تقويم المستخدم في عدد الجداول المحددة من خلال فئات فرعية مختلفة من CalendarContract:

  • يحتوي الجدول CalendarContract.Calendars على الأحداث الخاصة بالتقويم المعلومات. يحتوي كل صف في هذا الجدول على تفاصيل تقويم واحد، مثل الاسم واللون ومزامنة المعلومات وما إلى ذلك.
  • يحتوي جدول CalendarContract.Events على معلومات خاصة بالحدث. ويحتوي كل صف في هذا الجدول على معلومات عن حدث واحد، مثل عنوان الحدث وموقعه الجغرافي ووقت البدء ووقت الانتهاء وما إلى ذلك يمكن أن يقع الحدث لمرة واحدة أو بشكل متكرر عدة مرات. يتم تخزين الحضور والتذكيرات والخصائص الموسّعة في جداول منفصلة استخدِم _ID الخاص بالحدث لربطه بالحدث.
  • يحتوي الجدول CalendarContract.Instances على وقت البدء والانتهاء عدد مرات ورود حدث ما. يمثل كل صف في هذا الجدول موضع ورود واحد. بالنسبة إلى الأحداث التي تُقام لمرة واحدة أي تعيين واحد لواحد للمثيلات بالأحداث. بالنسبة للأحداث المتكررة، يتم إنشاء صفوف متعددة يتم إنشاؤه تلقائيًا لتتوافق مع التكرارات المتعددة لهذا الحدث.
  • يحتوي جدول CalendarContract.Attendees على الحاضر أو الضيف في الحدث. المعلومات. يمثل كل صف ضيفًا واحدًا لأحد الأحداث. ويحدد نوع الضيف الذي الشخص وردة الشخص على الحدث.
  • يحتوي الجدول CalendarContract.Reminders على بيانات التنبيهات/الإشعارات. يمثل كل صف تنبيهًا واحدًا لحدث. يمكن أن يكون للحدث تذكيرات متعددة. عدد يتم تحديد تذكيرات لكل حدث في MAX_REMINDERS، والذي يتم ضبطه من خلال محوّل المزامنة الذي يمتلك التقويم المحدد. يتم تحديد التذكيرات بعدد الدقائق قبل بدء الحدث تحديد موعد وتحديد طريقة التنبيه، مثل استخدام تنبيه أو رسالة إلكترونية أو رسالة قصيرة للتذكير المستخدم.
  • يحتوي الجدول CalendarContract.ExtendedProperties على حقول بيانات غير شفافة يستخدمه محوّل المزامنة. لا يتخذ الموفّر أي إجراء بشأن العناصر في هذا الجدول باستثناء الحذف عند حذف الأحداث ذات الصلة بها.

للوصول إلى بيانات تقويم أحد المستخدمين من خلال موفِّر التقويم، يجب أن يطلب التطبيق إذن READ_CALENDAR (للإذن بالقراءة) WRITE_CALENDAR (لإمكانية الوصول للكتابة).

الهدف من الحدث

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

موفِّر البريد الصوتي

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

نظرًا لأن واجهات برمجة التطبيقات لا تسمح حاليًا للتطبيقات التابعة للجهات الخارجية بقراءة جميع رسائل البريد الصوتي من فإن تطبيقات الجهات الخارجية الوحيدة التي يجب أن تستخدم واجهات برمجة تطبيقات البريد الصوتي هي تلك التي تحتوي على بريد صوتي لتقديمها إلى المستخدم.

تحدّد الفئة VoicemailContract موفّر المحتوى مقدّم خدمة البريد الصوتي توفّر الفئتان الفرعيتان VoicemailContract.Voicemails وVoicemailContract.Status جداول يمكن للتطبيقات فيها إدراج بيانات البريد الصوتي لتخزينها على الجهاز للحصول على مثال عن تطبيق مقدِّم خدمة البريد الصوتي، راجِع قسم مقدِّم خدمة البريد الصوتي تجريبي.

وسائط متعددة

يضيف Android 4.0 العديد من واجهات برمجة التطبيقات الجديدة للتطبيقات التي تتفاعل مع الوسائط مثل الصور ومقاطع الفيديو والموسيقى.

تأثيرات الوسائط

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

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

  1. يجب ربطها بصورة زخرفة GL_TEXTURE_2D.
  2. يجب أن تحتوي على مستوى صور mipmap واحد على الأقل.

يحدّد عنصر Effect تأثير وسائط واحدًا يمكنك تطبيقه عليه إطار صورة. إليك الخطوات الأساسية لإنشاء Effect:

  1. يمكنك طلب EffectContext.createWithCurrentGlContext() من سياق OpenGL ES 2.0.
  2. يمكنك استخدام EffectContext الذي تم إرجاعه لطلب الرقم EffectContext.getFactory()، ما يؤدي إلى عرض مثيل. من أصل EffectFactory.
  3. الاتصال بـ createEffect()، وتمريره اسم التأثير من @link android.media.effect.Effectfactor}، مثل EFFECT_FISHEYE أو EFFECT_VIGNETTE.

يمكنك تعديل معلَمات التأثير عن طريق استدعاء setParameter() وتمرير اسم مَعلمة وقيمة مَعلمة. يقبل كل نوع من التأثير المعاملات المختلفة، والتي يتم توثيقها باسم التأثير. على سبيل المثال، تتضمن الدالة EFFECT_FISHEYE معلَمة واحدة للسمة scale تشويه.

لتطبيق تأثير على زخرفة، يمكنك طلب apply() على Effect ومرر في زخرفة المدخلات، كلاً من العرض والارتفاع، والمخرجات زخرفة. يجب ربط الهيئة المُدخلة بزخرفة GL_TEXTURE_2D. الصورة (يتم ذلك عادةً من خلال استدعاء glTexImage2D() ). يمكنك تقديم مستويات mipmap متعددة. إذا لم يتم ربط زخرفة الإخراج بـ زخرفة صورة، سيتم ربطها تلقائيًا بالتأثير كـ GL_TEXTURE_2D ومع مستوى mipmap واحد (0)، والذي سيكون له القيمة نفسها الحجم كمدخل.

نؤكّد أنّه ستتم إتاحة جميع التأثيرات المدرَجة في EffectFactory. ومع ذلك، لا تتوافق بعض التأثيرات الإضافية المتوفرة من المكتبات الخارجية مع جميع الأجهزة، لذا يجب عليك أولاً التحقق مما إذا كان التأثير المطلوب من المكتبة الخارجية مدعومًا من خلال استدعاء، isEffectSupported()

عميل تحكُّم عن بُعد

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

لتفعيل برامج التحكم عن بُعد لمشغّل الوسائط، يمكنك إنشاء مثيل RemoteControlClient باستخدام طريقة الإنشاء الخاصة به مع تمرير PendingIntent الذي يبث ACTION_MEDIA_BUTTON. يجب أن يفصح الغرض أيضًا عن المكوِّن BroadcastReceiver الصريح في تطبيقك الذي يعالج حدث ACTION_MEDIA_BUTTON.

لتحديد إدخالات عنصر التحكّم في الوسائط التي يمكن للمشغّل معالجتها، يجب الاتصال بـ setTransportControlFlags() على RemoteControlClient، يتم تمرير مجموعة من علامات FLAG_KEY_MEDIA_*، مثل "FLAG_KEY_MEDIA_PREVIOUS" و"FLAG_KEY_MEDIA_NEXT"

عليك بعد ذلك تسجيل RemoteControlClient من خلال تمريره إلى MediaManager.registerRemoteControlClient(). بعد التسجيل، سيتلقى مستقبِل البث الذي أعلنت فيه عند إنشاء مثيل لـ RemoteControlClient ACTION_MEDIA_BUTTON الأحداث عند الضغط على زر من وحدة التحكم عن بُعد. يتضمّن الغرض الذي تتلقّاه من مفتاح KeyEvent الذي تم الضغط عليه، والذي يمكنك استرداده من الغرض باستخدام getParcelableExtra(Intent.EXTRA_KEY_EVENT).

لعرض معلومات عن الوسائط قيد التشغيل على جهاز التحكّم عن بُعد، يُرجى الاتصال بـ editMetaData() وإضافة البيانات الوصفية إلى الجهاز الذي تم إرجاعه RemoteControlClient.MetadataEditor يمكنك توفير صورة نقطية لأعمال الوسائط الفنية، معلومات عددية مثل الوقت المنقضي ومعلومات نصية مثل عنوان المقطع الصوتي. بالنسبة عند الحصول على معلومات عن المفاتيح المتاحة، ستظهر لك علامات METADATA_KEY_* في MediaMetadataRetriever.

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

مشغّل الوسائط

  • يتطلب بث الوسائط على الإنترنت من MediaPlayer الآن الحصول على إذن INTERNET. إذا كنت تستخدم MediaPlayer من أجل: تشغيل محتوى من الإنترنت، يُرجى التأكّد من إضافة INTERNET للحصول على إذن بالوصول إلى ملف البيان، وإلّا فلن يعمل تشغيل الوسائط بدءًا من Android. 4.0.
  • يسمح لك setSurface() بتحديد Surface ليعمل كوحدة تخزين الفيديو.
  • يتيح لك setDataSource() إرسال عناوين HTTP إضافية مع طلبك، والتي يمكن أن تكون مفيدة للبث المباشر عبر HTTP(S)
  • أصبح البث المباشر عبر بروتوكول HTTP(S) يتعامل الآن مع ملفات تعريف ارتباط HTTP في جميع الطلبات

أنواع الوسائط

يتيح نظام التشغيل Android 4.0 إمكانية استخدام العناصر التالية:

  • الإصدار 3 من بروتوكول البث المباشر عبر HTTP/HTTPS
  • ترميز الصوت AAC الأولي لـ ADTS
  • صور WEBP
  • فيديو Matroska

لمزيد من المعلومات، يمكنك الاطّلاع على الوسائط المتوافقة. التنسيقات:

الكاميرا

تشمل الفئة Camera الآن واجهات برمجة تطبيقات لرصد الوجوه والتحكّم فيها. مجالات التركيز وقياس الأداء.

التعرّف على الوجه

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

لرصد الوجوه في تطبيق الكاميرا، عليك تسجيل Camera.FaceDetectionListener من خلال الاتصال بـ setFaceDetectionListener(). يمكنك بعد ذلك بدء سطح الكاميرا وابدأ بالتعرّف على الوجوه من خلال الاتصال بالرقم startFaceDetection().

عندما يكتشف النظام وجهًا واحدًا أو أكثر في مشهد الكاميرا، يستدعي معاودة الاتصال عبر onFaceDetection() في تنفيذ Camera.FaceDetectionListener، بما في ذلك مصفوفة من Camera.Face عناصر

يوفّر مثيل الفئة Camera.Face معلومات مختلفة حول التعرّف على الوجه، بما في ذلك:

  • تمثّل هذه السمة Rect حدودًا للوجه بالنسبة إلى صورة الكاميرا. مجال الرؤية الحالي
  • عدد صحيح بين 1 و100 يشير إلى مدى ثقة النظام في أن الكائن وجه بشري
  • معرّف فريد يمكنك من خلاله تتبّع وجوه متعددة
  • عدة أجسام Point تشير إلى مكان العينَين والفم الموقع الجغرافي

ملاحظة: قد لا تكون ميزة "التعرّف على الوجه" متاحة في بعض الأجهزة. الأجهزة، لذا عليك التحقّق من خلال الاتصال بـ getMaxNumDetectedFaces() والتأكُّد من إرجاع المشتريات أكبر من صفر. كذلك، قد لا تتيح بعض الأجهزة تحديد العينين والفم، وفي هذه الحالة، ستكون هذه الحقول في الكائن Camera.Face فارغة.

مناطق التركيز وقياس العداد

يمكن لتطبيقات الكاميرا الآن التحكّم في المناطق التي تستخدمها الكاميرا للتركيز عليها وقياس اللون الأبيض. توازن والتعرض التلقائي للضوء تستخدم كلتا الميزتين فئة Camera.Area الجديدة لتحديد منطقة العرض الحالي للكاميرا التي ينبغي التركيز عليها أو قياسها. ويحدِّد مثال الفئة Camera.Area حدود المنطقة باستخدام Rect ووزن المنطقة، ويمثّل ذلك مستوى أهمية ذلك. المساحة، مقارنة بالمناطق الأخرى في الاعتبار - بعدد صحيح.

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

لتحديد نطاق التركيز أو مناطق قياس حصة القراءة المجانية، ما عليك سوى طلب setFocusAreas() أو setMeteringAreas(). يأخذ كل منها List من Camera.Area من العناصر التي تشير إلى المناطق التي يجب مراعاتها للتركيز أو قياس درجة الحرارة. على سبيل المثال، يمكنك تنفيذ ميزة تسمح للمستخدم بتحديد منطقة التركيز من خلال لمس منطقة في المعاينة، ثم ترجمة هذا النص إلى عنصر Camera.Area وطلب تركيز الكاميرا على هذه المنطقة من المشهد وسيتم باستمرار تعديل التركيز أو التعرّض للضوء في تلك المنطقة مع تغيّر المشهد.

التركيز التلقائي المستمر للصور

يمكنك الآن تفعيل ميزة "التركيز التلقائي المستمر" (CAF) عند التقاط الصور. لتفعيل CAF في تطبيق الكاميرا، اجتياز FOCUS_MODE_CONTINUOUS_PICTURE إلى setFocusMode(). عندما تكون مستعدًا للالتقاط صورة، الاتصال برقم autoFocus(). سيتلقّى جهاز "Camera.AutoFocusCallback" معاودة الاتصال على الفور للإشارة إلى ما إذا كان وتحقيق التركيز. لاستئناف CAF بعد تلقّي معاودة الاتصال، يجب الاتصال بـ cancelAutoFocus().

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

ميزات الكاميرا الأخرى

  • أثناء تسجيل الفيديو، يمكنك الآن الاتصال بـ takePicture() لحفظ صورة بدون مقاطعة جلسة الفيديو. قبل القيام بذلك، يجب عليك الاتصال بـ isVideoSnapshotSupported() للتأكّد من الأجهزة التي تدعمها.
  • يمكنك الآن قفل التعرض التلقائي للضوء وموازنة اللون الأبيض باستخدام setAutoExposureLock() وsetAutoWhiteBalanceLock() لمنع حدوث ذلك. هذه الخصائص من التغيير.
  • يمكنك الآن الاتصال بـ "setDisplayOrientation()" أثناء تشغيل معاينة الكاميرا. في السابق، كان بإمكانك تسمية هذا قبل بدء المعاينة فقط، ولكن يمكنك الآن تغيير الاتجاه في أي وقت.

أهداف بث الكاميرا

  • Camera.ACTION_NEW_PICTURE: يشير ذلك إلى أن المستخدم قد التقط صورة جديدة. يستدعي تطبيق "الكاميرا" المدمج هذه بث المحتوى بعد التقاط صورة، ويجب أن تبثّ تطبيقات الكاميرا التابعة لجهات خارجية هذا الهدف أيضًا بعد التقاط صورة.
  • Camera.ACTION_NEW_VIDEO: يشير ذلك إلى أن المستخدم قد صوّر فيديو جديدًا. يستدعي تطبيق "الكاميرا" المدمج هذه بثه بعد تسجيل الفيديو ويجب أن تبثّ تطبيقات الكاميرا التابعة لجهات خارجية هذا الهدف أيضًا بعد التقاط فيديو.

شعاع Android (NDEF Push باستخدام NFC)

ميزة شعاع Android هي ميزة جديدة في NFC تتيح لك إرسال رسائل NDEF من جهاز إلى أخرى (عملية تعرف أيضًا باسم "NDEF Push"). يبدأ نقل البيانات عندما وتكون الأجهزة التي تعمل بنظام التشغيل Android والمتوافقة مع شعاع Android قريبة جدًا (حوالي 4 سم)، وعادةً ما تكون مع لمس ظهورهم. يمكن أن تحتوي البيانات داخل رسالة NDEF على أي بيانات ترغب في مشاركتها بين الأجهزة. على سبيل المثال، يشارك تطبيق "الأشخاص" جهات الاتصال، ويشارك YouTube الفيديوهات، والمتصفّح يشارك عناوين URL باستخدام شعاع Android.

لنقل البيانات بين الأجهزة باستخدام شعاع Android، يجب إنشاء NdefMessage يحتوي على المعلومات التي تريد مشاركتها أثناء نشاطك. المقدمة. عليك حينئذٍ تمرير NdefMessage إلى النظام في واحد من اثنين الطرق:

  • حدِّد قيمة NdefMessage واحدة لدفعها أثناء النشاط:

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

  • ويمكنك تحديد قيمة NdefMessage التي سيتم إرسالها عند بدء "شعاع Android":

    تنفيذ NfcAdapter.CreateNdefMessageCallback، حيث يتم تنفيذ createNdefMessage() تُرجع الطريقة NdefMessage الذي تريد إرساله. بعد ذلك، عليك تمرير تنفيذ NfcAdapter.CreateNdefMessageCallback إلى setNdefPushMessageCallback().

    في هذه الحالة، عند تفعيل ميزة "شعاع Android" على جهاز آخر أثناء وجود نشاطك في في المقدّمة، يطلب النظام createNdefMessage() لاسترداد NdefMessage الذي تريد إرساله. ويسمح لك ذلك بتحديد NdefMessage الذي سيتم إرساله فقط عند بدء شعاع Android، في حال كان المحتوى الرسالة طوال عمر النشاط.

في حال أردت تشغيل رمز معيّن بعد أن يرسل النظام رمز NDEF بنجاح إلى الجهاز الآخر، يمكنك تنفيذ NfcAdapter.OnNdefPushCompleteCallback وضبطها من خلال setNdefPushCompleteCallback(). سيجري النظام ثم الاتصال بالرقم onNdefPushComplete() عند تسليم الرسالة.

على جهاز الاستقبال، يرسل النظام رسائل NDEF Push بطريقة مماثلة لتلك التي يتم إرسالها عبر تقنية NFC العادية. . يستدعي النظام هدفًا باستخدام ACTION_NDEF_DISCOVERED إجراء لبدء نشاط، إمّا بعنوان URL أو من نوع MIME تم ضبطه وفقًا لأول NdefRecord في NdefMessage للنشاط الذي تريد يمكنك توضيح فلاتر الأهداف لعناوين URL أو أنواع MIME التي يهتم بها تطبيقك. لمزيد من المعلومات، معلومات حول Tag Dispatch، راجع دليل مطوّري برامج NFC.

إذا كنت تريد أن يتضمن NdefMessage معرف موارد منتظم (URI)، يمكنك الآن الاستفادة من أسهل طريقة الطريقة createUri لإنشاء NdefRecord جديد استنادًا إلى سلسلة أو كائن Uri. إذا كان عنوان URI هو تنسيقًا خاصًا تريد أن يحصل عليه تطبيقك أيضًا أثناء حدث شعاع Android، فلتر أهداف لنشاطك باستخدام نظام URI نفسه لتلقي رسالة NDEF واردة.

يجب عليك أيضًا تمرير "سجل تطبيق Android" مع NdefMessage في لضمان معالجة التطبيق لرسالة NDEF الواردة، حتى إذا لم تكن فلترة التطبيقات لإجراء الغرض نفسه. يمكنك إنشاء سجل تطبيق Android من خلال جارٍ الاتصال بـ createApplicationRecord()، وتمريره اسم حزمة التطبيق. عندما يتلقّى الجهاز الآخر رسالة NDEF مع سجل التطبيق وتطبيقات متعددة تشتمل على أنشطة تعالج الغرض المحدد، يسلم النظام الرسالة دائمًا إلى النشاط في تطبيقك (بناءً على مطابقة سجل التطبيق). إذا لم يكن التطبيق مثبّتًا على الجهاز المستهدف حاليًا، سجل تطبيقات Android لتشغيل Google Play ونقل المستخدم إلى لتثبيت التطبيق.

إذا كان تطبيقك لا يستخدم واجهات برمجة التطبيقات NFC لإرسال رسائل NDEF Push، سيوفّر Android في هذه الحالة السلوك التلقائي: عندما يكون تطبيقك في المقدّمة على أحد الأجهزة وتكون ميزة شعاع Android باستخدام جهاز آخر يعمل بنظام التشغيل Android، فسيتلقّى الجهاز الآخر رسالة NDEF سجلّ تطبيق Android الذي يحدّد تطبيقك إذا كان جهاز الاستقبال يتضمّن تثبيت التطبيق، يبدأ النظام تشغيله؛ إذا لم يكن مثبّتًا، يفتح Google Play ويأخذ المستخدم إلى تطبيقك لتثبيته.

يمكنك الاطّلاع على المزيد من المعلومات حول ميزة "شعاع Android" وميزات NFC الأخرى في دليل مطوّري برامج أساسيات NFC. للحصول على بعض أمثلة التعليمات البرمجية باستخدام شعاع Android، راجع قسم العرض التوضيحي لـ "شعاع":

شبكة Wi-Fi من نظير لنظير (P2P)

يدعم Android الآن اتصالات Wi-Fi من خلال شبكة الند للند (P2P) بين الأجهزة التي تعمل بنظام التشغيل Android أنواع الأجهزة الأخرى (بما يتوافق مع معيار Wi-Fi DirectTM التابع لتحالف Wi-Fi برنامج الشهادة) بدون نقطة اتصال أو اتصال بالإنترنت. ويوفر إطار عمل Android من واجهات برمجة التطبيقات (API) لشبكة Wi-Fi التي تسمح لك باكتشاف الأجهزة الأخرى والاتصال بها عند كل جهاز وتدعم اتصال Wi-Fi P2P، ثم الاتصال عبر اتصال سريع عبر مسافات أطول بكثير من اتصال بلوتوث.

تحتوي الحزمة الجديدة android.net.wifi.p2p على جميع واجهات برمجة التطبيقات لتنفيذ شبكة الند للند. اتصالات بشبكة Wi-Fi. الصف الأساسي الذي عليك العمل معه هو WifiP2pManager، ويمكنك الحصول عليه من خلال الاتصال بـ getSystemService(WIFI_P2P_SERVICE). يشتمل WifiP2pManager على واجهات برمجة تطبيقات تتيح لك ما يلي:

  • يمكنك إعداد تطبيقك للاتصالات من مستخدم إلى آخر من خلال الاتصال على initialize().
  • التعرّف على الأجهزة المجاورة من خلال الاتصال بالرقم discoverPeers()
  • يمكنك بدء اتصال P2P من خلال الاتصال برقم connect().
  • والمزيد

هناك العديد من الواجهات والفئات الأخرى الضرورية أيضًا، مثل:

  • تتيح لك واجهة WifiP2pManager.ActionListener تلقّي عمليات الاستدعاء عندما تنجح عملية مثل اكتشاف الأقران أو الاتصال بهم بنجاح أو فشلها.
  • تتيح لك واجهة WifiP2pManager.PeerListListener استلام معلومات حول الزملاء المكتشفين. توفّر معاودة الاتصال WifiP2pDeviceList، يمكنك من خلاله استرداد كائن WifiP2pDevice لكل جهاز ضمن النطاق والحصول على معلومات مثل اسم الجهاز وعنوانه ونوع الجهاز وإعدادات WPS التي يتوافق معها الجهاز وغير ذلك
  • تتيح لك واجهة WifiP2pManager.GroupInfoListener ما يلي: تلقي معلومات حول مجموعة P2P. توفر عملية الاسترداد كائن WifiP2pGroup، يوفر معلومات عن المجموعة مثل المالك واسم الشبكة وعبارة المرور.
  • تتيح لك واجهة WifiP2pManager.ConnectionInfoListener تلقي معلومات حول الاتصال الحالي. توفّر عملية معاودة الاتصال كائن WifiP2pInfo، يحتوي على معلومات مثل ما إذا كانت المجموعة قد تم الفريق ومن هو مالك المجموعة.

لاستخدام واجهات برمجة التطبيقات لشبكة Wi-Fi P2P، يجب أن يطلب تطبيقك أذونات المستخدمين التالية:

  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE
  • INTERNET (على الرغم من أنّ تطبيقك لا يرتبط من الناحية الفنية بالإنترنت، فإن الاتصال بأقران Wi-Fi P2P باستخدام مقابس جافا القياسية يتطلب الإنترنت إذن).

يبث نظام Android أيضًا العديد من الإجراءات المختلفة أثناء أحداث معيّنة من شبكة Wi-Fi P2P:

راجِع مستندات "WifiP2pManager" للحصول على مزيد من المعلومات. كذلك على العرض التوضيحي لـ Wi-Fi P2P نموذج تطبيق.

أجهزة Bluetooth Health

يتوافق Android الآن مع أجهزة "الملف الشخصي للصحة عبر البلوتوث"، وبالتالي يمكنك إنشاء تطبيقات تستخدم البلوتوث للاتصال بالأجهزة الصحية التي تتوافق مع البلوتوث، مثل أجهزة مراقبة معدل ضربات القلب مقاييس الدم وموازين الحرارة والموازين

على غرار سماعات الرأس العادية وأجهزة الملف الشخصي A2DP، يجب الاتصال بـ getProfileProxy() باستخدام BluetoothProfile.ServiceListener ونوع الملف الشخصي HEALTH لإنشاء اتصال بالملف الشخصي. خادم وكيل.

بعد الحصول على الخادم الوكيل لملف الصحة (BluetoothHealth) )، فإن الاتصال بالأجهزة الصحية المقترنة والاتصال بها يشمل ما يلي فئات البلوتوث:

  • BluetoothHealthCallback: يجب تمديد هذه الفئة وتنفيذ طرق معاودة الاتصال لتلقي تحديثات حول التغييرات التي تطرأ على حالة تسجيل التطبيق حالة قناة البلوتوث
  • BluetoothHealthAppConfiguration: أثناء عمليات معاودة الاتصال على BluetoothHealthCallback، سيظهر لك نسخة من هذا الكائن، وهي نسخة مطابقة له. لتوفير معلومات الإعداد حول جهاز السلامة عبر البلوتوث المتاح، والذي يجب استخدامه لإجراء عمليات مختلفة مثل بدء الاتصالات وإنهائها باستخدام واجهات برمجة تطبيقات BluetoothHealth.

للحصول على مزيد من المعلومات حول استخدام "ملف البلوتوث الصحي"، يُرجى الاطّلاع على مستندات "BluetoothHealth".

تسهيل الاستخدام

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

وضع الاستكشاف باللمس

يمكن للمستخدمين الذين يعانون من فقدان البصر استكشاف الشاشة الآن عن طريق لمس أحد الإصبعين وسحبه. الشاشة لسماع الأوصاف الصوتية للمحتوى. نظرًا لأن وضع الاستكشاف باللمس يعمل كـ المؤشر الافتراضي، فإنه يسمح لقارئات الشاشة بتحديد النص الوصفي بنفس طريقة يمكن للقراء الوصول إليها عندما يتنقل المستخدم باستخدام لوحة التحكم أو كرة التتبع - من خلال قراءة المعلومات المتوفرة بواسطة "android:contentDescription" و"setContentDescription()" بعد إجراء محاكاة "التمرير" فعالية. وبالتالي، تُعد هذا تذكيرًا بضرورة تقديم نص وصفي للمشاهدات في التطبيق، خاصةً بالنسبة إلى ImageButton وEditText، ImageView والتطبيقات المصغّرة الأخرى التي قد لا تحتوي بشكلٍ طبيعي على بيانات وصفية النص.

إمكانية الوصول إلى طرق العرض

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

تجدر الإشارة أولاً إلى أنّ سلوك طريقة sendAccessibilityEvent() قد تغيّر في Android. 4.0. كما هو الحال مع الإصدار السابق من Android، عندما يفعّل المستخدم خدمات إمكانية الوصول على الجهاز وحدث إدخال مثل النقر أو التمرير، فسيتم إرسال إشعار إلى العرض ذي الصلة sendAccessibilityEvent() في السابق، سيؤدي تنفيذ sendAccessibilityEvent() إلى إعداد AccessibilityEvent وإرساله إلى AccessibilityManager. يتضمن السلوك الجديد بعض معاودة الاتصال الإضافية الطرق التي تسمح لطريقة العرض وعناصرها الرئيسية بإضافة المزيد من المعلومات السياقية إلى الحدث:

  1. عند الاستدعاء، يتم تأجيل الطريقتَين sendAccessibilityEvent() وsendAccessibilityEventUnchecked(). إلى onInitializeAccessibilityEvent().

    قد تحتاج عمليات التنفيذ المخصّصة لـ View إلى تنفيذ onInitializeAccessibilityEvent() على إرفاق معلومات إضافية عن تسهيل الاستخدام في AccessibilityEvent، ولكن يجب أيضًا استدعاء التنفيذ الفائق توفر معلومات افتراضية مثل وصف المحتوى القياسي وفهرس العناصر والمزيد. ومع ذلك، يجب ألا تضيف محتوى نصيًا إضافيًا في معاودة الاتصال هذه، فإن ذلك يحدث التالية.

  2. بعد الإعداد، إذا كان الحدث من بين الأنواع المتعددة التي يجب ملؤها بالنص المعلومات، تتلقّى طريقة العرض بعد ذلك مكالمة إلى dispatchPopulateAccessibilityEvent()، الذي يتأخر إلى onPopulateAccessibilityEvent() معاودة الاتصال.

    عادةً ما تؤدي عمليات التنفيذ المخصّصة لـ View إلى تنفيذ onPopulateAccessibilityEvent() لإضافة المزيد إرسال محتوى نصي إلى AccessibilityEvent إذا كان نص android:contentDescription ناقصًا أو غير كافية. لإضافة المزيد من الوصف النصي إلى AccessibilityEvent، اتصل بـ getText().add().

  3. عند هذه النقطة، تمرر View الحدث لأعلى التدرج الهرمي لطريقة العرض من خلال استدعاء requestSendAccessibilityEvent() على مشاهدة الوالدين. وتتاح لكل طريقة عرض رئيسية فرصة تعزيز معلومات إمكانية الوصول من خلال إضافة AccessibilityRecord، حتى يصل في النهاية إلى العرض الجذر، الذي يرسل الحدث إلى AccessibilityManager مع sendAccessibilityEvent().

بالإضافة إلى الطرق الجديدة أعلاه، التي تكون مفيدة عند تمديد الفئة View، يمكنك أيضًا اعتراض عمليات استدعاء الحدث على أي View من خلال تمديد AccessibilityDelegate وضبطه على العرض باستخدام setAccessibilityDelegate() عند إجراء ذلك، تعمل كل طريقة إمكانية وصول في طريقة العرض على تأجيل الاستدعاء إلى الطريقة المقابلة في للمفوض. على سبيل المثال، عندما تتلقّى طريقة العرض استدعاء onPopulateAccessibilityEvent()، يتم تمريره إلى بالطريقة نفسها في View.AccessibilityDelegate. أي طرق لم يتم التعامل معها من خلال يُعاد المفوَّض إلى العرض للتعرّف على السلوك التلقائي. ويتيح لك ذلك تجاوز الطرق اللازمة لأي طريقة عرض محددة بدون تمديد الفئة View.

إذا أردت الحفاظ على التوافق مع إصدارات Android التي تسبق 4.0، مع دعم أيضًا في واجهات برمجة التطبيقات الجديدة المخصّصة لتسهيل الاستخدام، يمكنك إجراء ذلك باستخدام أحدث إصدار من الإصدار 4 من library (في الحزمة المتوافقة، r4) باستخدام مجموعة من فئات الأدوات التي توفّر واجهات برمجة التطبيقات الجديدة لتسهيل الاستخدام في واجهة برمجة تطبيقات التصميم.

خدمات إمكانية الدخول

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

إذا كنت تعمل على تطوير خدمة لتسهيل الاستخدام (مثل قارئ الشاشة)، يمكنك الوصول إلى معلومات إضافية عن المحتوى وتسلسلات العرض الهرمي، وذلك من خلال الإجراءات التالية:

  1. عند تلقّي AccessibilityEvent من أحد التطبيقات، يمكنك استدعاء AccessibilityEvent.getRecord() لاسترداد AccessibilityRecord محدد (قد يكون هناك العديد من السجلات الملحقة بـ حدث).
  2. إما من AccessibilityEvent أو من AccessibilityRecord فردي، يمكنك استدعاء getSource() لاسترداد كائن AccessibilityNodeInfo.

    تمثّل AccessibilityNodeInfo عقدة واحدة لمحتوى النافذة بتنسيق يسمح لك بطلب معلومات حول تسهيل الاستخدام العقدة. يصف الكائن AccessibilityNodeInfo المعروض من AccessibilityEvent مصدر الحدث، بينما يصف المصدر من تصف AccessibilityRecord العلامة السابقة للحدث المصدر.

  3. باستخدام AccessibilityNodeInfo، يمكنك الاستعلام عن المعلومات حول هذا العنصر، اتصل بـ getParent() أو getChild() لاجتياز العرض التسلسل الهرمي، فضلاً عن إضافة طرق عرض ثانوية إلى العقدة.

لنشر تطبيقك لنفسه في النظام كخدمة تسهيل وصول، عليه أن يفصح عن ملف إعداد XML يتوافق مع AccessibilityServiceInfo. لمزيد من المعلومات حول إنشاء لتسهيل الاستخدام، يمكنك الاطّلاع على AccessibilityService وSERVICE_META_DATA للحصول على معلومات حول إعدادات XML.

واجهات برمجة التطبيقات الأخرى المخصصة لتسهيل الاستخدام

إذا كنت مهتمًا بحالة إمكانية الوصول للجهاز، يتضمّن "AccessibilityManager" بعض واجهات برمجة التطبيقات الجديدة، مثل:

خدمات المدقق الإملائي

يتيح إطار عمل جديد للمدقق الإملائي للتطبيقات إنشاء المدقق الإملائي بطريقة تشبه إطار عمل أسلوب الإدخال (لأدوات IME). لإنشاء مدقق إملائي جديد، يجب تنفيذ خدمة يمتد SpellCheckerService وتوسيع الصف SpellCheckerService.Session لتقديم اقتراحات إملائية على النص الذي توفره طرق معاودة الاتصال في الواجهة. في طرق معاودة الاتصال SpellCheckerService.Session، يجب إرجاع الاقتراحات الإملائية كعناصر SuggestionsInfo

على التطبيقات التي تستخدم خدمة التدقيق الإملائي تقديم بيان عن إذن BIND_TEXT_SERVICE على النحو الذي تطلبه الخدمة. يجب أن تشير الخدمة أيضًا إلى فلتر أهداف يستخدم <action android:name="android.service.textservice.SpellCheckerService" /> كإجراء الغرض، ويجب أن تضمين عنصر <meta-data> الذي يفصح عن معلومات التهجئة مدقق الفيديو.

مشاهدة نموذج تطبيق المدقق الإملائي النموذج تطبيق برنامج المدقق الإملائي كمثال للرمز.

محركات تحويل النص إلى كلام

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

استخدام محركات تحويل النص إلى كلام

في الإصدارات السابقة من Android، كان بإمكانك استخدام الفئة TextToSpeech. لإجراء عمليات تحويل النص إلى كلام باستخدام محرك تقنية تحويل النص إلى كلام الذي يوفره النظام أو تعيين محرك مخصّص باستخدام setEngineByPackageName(). وفي الإصدار Android 4.0، تم اتّباع طريقة setEngineByPackageName() متوقّفة نهائيًا ويمكنك الآن تحديد المحرّك لاستخدامه مع دالة إنشاء TextToSpeech جديدة تقبل اسم حزمة محرّك تحويل النص إلى كلام.

يمكنك أيضًا الاستعلام عن محركات تحويل النص إلى كلام المتاحة من خلال getEngines(). تعرض هذه الطريقة قائمة بكائنات TextToSpeech.EngineInfo، التي تتضمّن بيانات وصفية مثل والأيقونة والتسمية واسم الحزمة.

إنشاء محركات لتحويل النص إلى كلام

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

يتطلب الإعداد الأساسي تنفيذ TextToSpeechService بحيث يستجيب لهدف INTENT_ACTION_TTS_SERVICE. تشير رسالة الأشكال البيانية يحدث العمل الأساسي لمحرك تحويل النص إلى كلام أثناء معاودة الاتصال بـ onSynthesizeText() في إحدى الخدمات التي تمتد إلى TextToSpeechService. يقدم النظام هذه الطريقة الثانية الكائنات:

  • SynthesisRequest: يحتوي ذلك على بيانات مختلفة، بما في ذلك النص الذي والتوليف واللغة وسرعة الكلام ودرجة الصوت.
  • SynthesisCallback: هذه هي الواجهة التي من خلالها محرك تحويل النص إلى كلام (TTS) يرسل البيانات الكلامية الناتجة كبث صوت. يجب أن يستدعي المحرّك أولاً start() للإشارة إلى أنّ المحرّك جاهز للتسليم الصوت، ثم الاتصال بـ audioAvailable()، وتمريرها البيانات الصوتية في مخزن بايت. بعد أن يمرر المحرك كل الأصوات خلال مخزن مؤقت، طلب done().

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

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

إحصاءات استخدام الشبكة

يمنح Android 4.0 المستخدمين إمكانية رؤية دقيقة لمقدار بيانات الشبكة التي تستخدمها تطبيقاتهم. يوفر تطبيق "الإعدادات" عناصر تحكم تسمح للمستخدمين بإدارة الحدود القصوى لاستخدام بيانات الشبكة. إيقاف استخدام بيانات الخلفية لتطبيقات فردية. لتجنب تعطيل المستخدمين وصول التطبيق إلى البيانات من الخلفية، ينبغي لك وضع استراتيجيات لاستخدام البيانات الاتصال بكفاءة وتعديل الاستخدام بناءً على نوع الاتصال المتاح.

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

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

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

يجب الانتباه أيضًا إلى أنّ getBackgroundDataSetting() أصبح الآن متوقّفة نهائيًا وتعرض القيمة "صواب" دائمًا، لذا استخدِم getActiveNetworkInfo() بدلاً منها. قبل محاولة إجراء أي شبكة المعاملات، عليك دائمًا الاتصال بـ getActiveNetworkInfo() للحصول على NetworkInfo الذي يمثّل الشبكة الحالية وإجراء طلب بحث عن isConnected()، وذلك للتحقّق مما إذا كان الجهاز يحتوي على الاتصال. يمكنك بعد ذلك التحقق من خصائص الاتصال الأخرى، مثل ما إذا كان الجهاز أثناء التجوال أو الاتصال بشبكة Wi-Fi.

Enterprise

يوسِّع Android 4.0 إمكانات تطبيقات المؤسسات من خلال الميزات التالية.

خدمات شبكة VPN

يسمح الإصدار الجديد من "VpnService" للتطبيقات بإنشاء شبكة افتراضية خاصة (VPN) شبكة خاصة)، تعمل كـ Service. تنشئ خدمة VPN واجهة شبكة افتراضية بعنوانها وقواعد توجيه خاصة بها وتُجري جميع عمليات القراءة والكتابة باستخدام واصف الملفات.

لإنشاء خدمة VPN، يمكنك استخدام ميزة VpnService.Builder التي تتيح لك تحديد. عنوان الشبكة وخادم نظام أسماء النطاقات ومسار الشبكة والمزيد. عند الانتهاء، يمكنك تحديد من خلال استدعاء الدالة establish()، الذي يعرض الخطأ ParcelFileDescriptor.

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

سياسات الأجهزة

يمكن الآن للتطبيقات التي تدير قيود الجهاز إيقاف الكاميرا باستخدام setCameraDisabled() والسمة USES_POLICY_DISABLE_CAMERA (يتم تطبيقها مع العنصر <disable-camera /> في ملف إعداد السياسة).

إدارة الشهادات

توفّر فئة KeyChain الجديدة واجهات برمجة تطبيقات تتيح لك استيراد البيانات والوصول إليها. الشهادات في مخزن مفاتيح النظام. تبسط الشهادات عملية تثبيت كلا العميلين الشهادات (للتحقق من هوية المستخدم) وشهادات مرجع التصديق (إلى إثبات هوية الخادم). يمكن لتطبيقات مثل متصفحات الويب أو برامج البريد الإلكتروني الوصول إلى الملفات المثبّتة شهادات لمصادقة المستخدمين مع الخوادم. يمكنك الاطّلاع على KeyChain. وثائق لمزيد من المعلومات.

أدوات الاستشعار في الأجهزة

تمت إضافة نوعين جديدين من أدوات الاستشعار في Android 4.0:

  • TYPE_AMBIENT_TEMPERATURE: جهاز استشعار الحرارة يوفّر درجة الحرارة المحيطة (الغرفة) بالدرجات المئوية.
  • TYPE_RELATIVE_HUMIDITY: جهاز استشعار للرطوبة يوفر الرطوبة المحيطة (الغرفة) النسبية كنسبة مئوية.

إذا كان الجهاز يحتوي على كل من جهازَي استشعار TYPE_AMBIENT_TEMPERATURE وTYPE_RELATIVE_HUMIDITY، يمكنك استخدامهما لحساب نقطة التكثُّف. والرطوبة المطلقة.

تم تشغيل جهاز استشعار الحرارة السابق TYPE_TEMPERATURE نهائيًا. يجب استخدام أداة استشعار TYPE_AMBIENT_TEMPERATURE بدلاً من ذلك.

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

شريط الإجراءات

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

تقسيم شريط الإجراءات

إذا كان شريط الإجراءات لديك يتضمن العديد من بنود العمل، فلن تتناسب جميعها مع شريط الإجراءات في شاشة ضيقة، لذلك سيضع النظام المزيد منها في القائمة الكاملة. ولكن Android 4.0 يسمح لك بتفعيل "شريط الإجراءات المقسّم" بحيث يمكن أن تظهر المزيد من بنود العمل على الشاشة الشريط المنفصل أسفل الشاشة. لتفعيل شريط الإجراءات المقسّم، أضِف android:uiOptions باستخدام "splitActionBarWhenNarrow" إلى <application> أو علامات <activity> فردية في ملف البيان. عند تفعيل هذا الخيار، سيضيف النظام شريطًا إضافيًا أسفل لجميع بنود العمل عندما تكون الشاشة صغيرة (لن تظهر أي بنود عمل في شريط الإجراءات).

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

أنماط شريط الإجراءات

إذا أردت تطبيق نمط مخصّص على شريط الإجراءات، يمكنك استخدام سمتَي النمط الجديدتين backgroundStacked وbackgroundSplit لتطبيق خلفية. قابل للرسم أو ملون إلى الشريط المكدس والشريط المنقسم، على التوالي. يمكنك أيضًا تعيين هذه الأنماط على بيئة تشغيل مع setStackedBackgroundDrawable() وsetSplitBackgroundDrawable()

موفِّر الإجراءات

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

على سبيل المثال، ShareActionProvider هو إضافة لـ ActionProvider تسهِّل "المشاركة". الإجراء من شريط الإجراءات. بدلاً من استخدام بند عمل تقليدي يستدعي نية ACTION_SEND، يمكنك استخدِم موفِّر الإجراءات هذا لتقديم طريقة عرض إجراء مع قائمة منسدلة بالتطبيقات التي تتعامل مع مقصد ACTION_SEND. عندما يختار المستخدم تطبيقًا لاستخدامه للإجراء، يتذكر ShareActionProvider هذا التحديد ويعرضه في عرض الإجراء لوصول أسرع إلى المشاركة مع ذلك التطبيق.

للإبلاغ عن جهة تقدّم إجراءات بشأن بند عمل، يجب تضمين android:actionProviderClass. في العنصر <item> لقائمة خيارات نشاطك، مع اسم فئة الإجراء مزودًا كقيمة. مثلاً:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

في onCreateOptionsMenu() الخاص بنشاطك الاتصال، لاسترداد مثيل لمزود الإجراء من عنصر القائمة وتعيين الغرض:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

للحصول على مثال حول استخدام ShareActionProvider، يمكنك الاطّلاع على ActionBarShareActionProviderActivity في ApiDemos.

عروض الإجراءات القابلة للتصغير

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

للإشارة إلى أنّ بند عمل يحتوي على طريقة عرض إجراء قابل للتصغير، أدرِج علامة “collapseActionView" في السمة android:showAsAction للعنصر <item> في ملف XML الخاص بالقائمة.

لتلقي استدعاءات عند تبديل طريقة عرض الإجراء بين موسّعة ومصغَّر، سجّل مثيل MenuItem.OnActionExpandListener مع MenuItem المعني من خلال استدعاء setOnActionExpandListener(). عليك عادةً إجراء ذلك أثناء معاودة الاتصال "onCreateOptionsMenu()".

للتحكّم في عرض الإجراء القابل للتصغير، يمكنك الاتصال بـ collapseActionView() وexpandActionView() على MenuItem المعنية.

عند إنشاء طريقة عرض إجراء مخصّص، يمكنك أيضًا تنفيذ واجهة CollapsibleActionView الجديدة لتلقي استدعاءات عند توسيع العرض تمّ التصغير.

واجهات برمجة التطبيقات الأخرى لشريط الإجراءات

  • يتيح لك setHomeButtonEnabled() تحديد ما إذا كان الرمز/الشعار يعمل كزر للانتقال إلى المنزل أو "لأعلى" (مرر "صحيح" لجعله يعمل زر).
  • يتيح لك كل من setIcon() وsetLogo() تحديد رمز شريط الإجراءات أو شعاره في وقت التشغيل.
  • يتيح لك Fragment.setMenuVisibility() تفعيل أو عطّل مستوى رؤية عناصر قائمة الخيارات التي يتضمنها الجزء. يكون ذلك مفيدًا إذا تم تمت إضافة الجزء إلى النشاط، ولكنه غير مرئي، لذا يجب أن تكون عناصر القائمة مخفي.
  • FragmentManager.invalidateOptionsMenu() إلغاء صلاحية قائمة خيارات النشاط أثناء الحالات المختلفة لدورة حياة الجزء قد لا تتوفر فيها الطريقة المكافئة من Activity.

واجهة المستخدم وطرق العرض

يقدم Android 4.0 مجموعة متنوعة من طرق العرض الجديدة ومكونات واجهة المستخدم الأخرى.

تخطيط الشبكة

GridLayout هي مجموعة طرق عرض جديدة تضع مشاهدات الأطفال على شكل مستطيل. الشبكة. على عكس TableLayout، يعتمد GridLayout على مستوى ثابت العرض الهرمي ولا تستفيد من طرق العرض الوسيطة مثل صفوف الجدول لتوفير البنية بدلاً من ذلك، تحدد العناصر الفرعية الصفوف والأعمدة التي يجب أن تشغلها (يمكن أن تمتد الخلايا إلى عدة الصفوف و/أو الأعمدة)، وبشكل افتراضي يتم وضعها بشكل تسلسلي عبر صفوف وأعمدة الشبكة. يحدد الاتجاه GridLayout ما إذا كانت العناصر الثانوية المتسلسلة هي يتم وضعها افتراضيًا أفقيًا أو عموديًا. يمكن تحديد المسافة بين الأطفال إما باستخدام أمثلة لطريقة عرض Space الجديدة أو من خلال ضبط مَعلمات الهوامش ذات الصلة عن الأطفال.

الاطّلاع على ApiDemos للعينات التي تستخدم GridLayout.

عرض الهيئة

TextureView هي طريقة عرض جديدة تتيح لك عرض محتوى بث، مثل كفيديو أو مشهد OpenGL. على الرغم من تشابهها مع SurfaceView، تُعتبر السمة TextureView فريدة من حيث أنّها تعمل كعرض عادي، بدلاً من إنشاء نافذة منفصلة، لكي تتمكّن من التعامل معها كأي عنصر View آخر. على سبيل المثال: يمكنك تطبيق عمليات تحويل أو تحريكها باستخدام ViewPropertyAnimator لضبط تعتيمها باستخدام setAlpha().

عليك الانتباه إلى أنّ TextureView لا يعمل إلا داخل نافذة تسريع الأجهزة.

لمزيد من المعلومات، اطّلِع على مستندات "TextureView".

تبديل التطبيق المصغَّر

تطبيق "Switch" المصغّر الجديد هو خيار يمكن للمستخدم سحبه إلى أحد الوضعَين الجانب أو الآخر (أو النقر فقط) لتبديل خيار بين حالتين.

يمكنك استخدام السمتَين android:textOn وandroid:textOff لتحديد النص لتظهر في مفتاح التبديل في حال التفعيل والإيقاف تشمل السمة android:text أيضًا وضع تسمية بجانب مفتاح التبديل.

للاطّلاع على نموذج عن مفاتيح التحكّم، يُرجى مراجعة ملف التنسيق switches.xml. ومفاتيح التبديل ذات الصلة .

قدّم Android 3.0 PopupMenu لإنشاء قوائم سياقية قصيرة تنبثق لأعلى عند نقطة ارتساء تحددها (تكون عادةً عند نقطة الارتساء من العنصر المحدد). Android 4.0 ممتد PopupMenu مع بعض الميزات المفيدة:

  • يمكنك الآن بسهولة تضخيم محتوى القائمة المنبثقة من مورد قائمة XML باستخدام inflate()، وتمريره معرّف مورد القائمة.
  • يمكنك الآن أيضًا إنشاء "PopupMenu.OnDismissListener" يتلقّى رد الاتصال عند تجاهل القائمة.

التفضيلات

يتم استخدام فئة مجردة جديدة باستخدام TwoStatePreference كأساس والتفضيلات التي توفر خيار تحديد حالتين. SwitchPreference الجديدة هي إضافة TwoStatePreference توفّر تطبيق Switch المصغّر في "عرض الإعدادات المفضّلة" للسماح للمستخدمين بتفعيل إعداد أو إيقافه بدون الحاجة إلى فتح نافذة إضافية أو شاشة التفضيلات أو مربع حوار على سبيل المثال، يستخدم تطبيق "الإعدادات" SwitchPreference لإعدادات Wi-Fi والبلوتوث.

مظاهر النظام

المظهر التلقائي لجميع التطبيقات التي تستهدف الإصدار 4.0 من نظام التشغيل Android (من خلال ضبط targetSdkVersion أو minSdkVersion إلى “14" أو أعلى) هي الآن "الجهاز التلقائي في الجهاز" الموضوع: Theme.DeviceDefault. قد يكون هذا مظهر داكن اللون أو مظهر داكن مختلف يحدده الجهاز المحدد.

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

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

زر قائمة الخيارات

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

لتقديم أفضل تجربة للمستخدم، يجب أن تستخدم التطبيقات الجديدة والمحدَّثة ActionBar بدلاً من ذلك لتوفير إمكانية الوصول إلى عناصر القائمة وضبط targetSdkVersion على "14" للاستفادة من أحدث السلوكيات التلقائية لإطار العمل.

عناصر التحكّم في إذن الوصول إلى واجهة مستخدم النظام

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

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

  • تحلّ العلامة SYSTEM_UI_FLAG_LOW_PROFILE محلّ علامة STATUS_BAR_HIDDEN. عند تعيين هذه العلامة، تعمل على تفعيل "الملف الشخصي المنخفض" لشريط النظام أو شريط التنقل العلوي. يتم أيضًا تعتيم أزرار التنقل والعناصر الأخرى في شريط النظام. جارٍ التفعيل يفيد ذلك في إنشاء المزيد من الألعاب الغامرة بدون تشتيت الانتباه أثناء التنقّل داخل النظام. الأزرار.
  • تحل العلامة SYSTEM_UI_FLAG_VISIBLE محل العلامة STATUS_BAR_VISIBLE لطلب أن يكون شريط النظام أو شريط التنقل مرئيًا.
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION هي علامة جديدة تطلب يختفي شريط التنقل تمامًا. ويُرجى العلم بأنّ هذه الميزة لا تعمل إلا مع شريط التنقّل. تستخدمها بعض الهواتف المحمولة (لا يخفي شريط النظام على الأجهزة اللوحية). شريط التنقل شريط العودة إلى العرض فور تلقي النظام لإدخال المستخدم. لذلك، هذا الوضع مفيد هي أساسًا لتشغيل الفيديو أو الحالات الأخرى التي تكون فيها الحاجة إلى الشاشة بأكملها مطلوبة، إلا أن البيانات التي أدخلها المستخدم غير مطلوب.

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

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

يمكنك الاطّلاع على فئة OverscanActivity لعرض توضيحي للخيارات المختلفة لواجهة مستخدم النظام.

إطار عمل الإدخال

يتيح نظام التشغيل Android 4.0 إمكانية استخدام أحداث تمرير المؤشر والأحداث الجديدة لقلم الشاشة وزر الماوس.

أحداث التمرير

تتيح الفئة View الآن ميزة "التمرير". الأحداث لتفعيل تفاعلات أكثر فائدةً من خلال استخدام أجهزة المؤشر (مثل الماوس أو الأجهزة الأخرى التي تؤدي إلى عرض محتوى على الشاشة) ).

لتلقّي أحداث التمرير على طريقة عرض، نفِّذ View.OnHoverListener و سجِّله لدى setOnHoverListener(). عند تمرير مؤشر الماوس الحدث الذي يحدث على شاشة العرض، يتلقّى المستمع مكالمة إلى onHover()، مع تقديم View تلقّيت الحدث وMotionEvent التي تصف نوع حدث التمرير الذي حدث. يمكن أن يكون حدث التمرير واحدًا مما يلي:

يجب أن تعرض قيمة View.OnHoverListener القيمة "صحيح" من onHover() إذا كانت تعالج حدث التمرير. إذا كان يعرض المستمع خطأ false، فسيتم إرسال حدث التمرير إلى طريقة العرض الرئيسية كالمعتاد.

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

للحصول على عرض توضيحي لأحداث التمرير الجديدة، اطّلِع على فئة التمرير في ApiDemos.

أحداث قلم الشاشة وزر الماوس

يوفّر Android الآن واجهات برمجة تطبيقات لتلقّي الإدخالات من جهاز إدخال قلم الشاشة، مثل جهاز التحويل الرقمي. جهاز ملحق للجهاز اللوحي أو شاشة تعمل باللمس تدعم قلم الشاشة.

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

يمكن لتطبيقك التمييز بين إدخالات الإصبع والماوس وقلم الشاشة والممحاة من خلال الاستعلام عن "نوع الأداة" المرتبطة بكل مؤشر في MotionEvent باستخدام getToolType(). في ما يلي أنواع الأدوات المحدّدة حاليًا: TOOL_TYPE_UNKNOWN وTOOL_TYPE_FINGER TOOL_TYPE_MOUSE، TOOL_TYPE_STYLUS، وTOOL_TYPE_ERASER. من خلال الاستعلام عن نوع الأداة، يمكن لتطبيقك يمكنه اختيار التعامل مع الإدخال بقلم الشاشة بطرق مختلفة بدءًا من الإدخال بالإصبع أو الماوس.

يمكن لتطبيقك أيضًا الاستعلام عن أزرار الماوس أو قلم الشاشة التي يتم الضغط عليها عن طريق الاستعلام عن "الزر الولاية لـ MotionEvent باستخدام getButtonState(). حالات الأزرار المحدّدة حاليًا هي: BUTTON_PRIMARY وBUTTON_SECONDARY وBUTTON_TERTIARY وBUTTON_BACK وBUTTON_FORWARD. للتيسير، يتم استخدام زري الماوس للخلف والأمام يتم ربطه تلقائيًا بالمفتاحين KEYCODE_BACK وKEYCODE_FORWARD. يمكن للتطبيق التعامل مع هذه المفاتيح لتقديم الدعم زر الماوس استنادًا إلى التنقل للأمام وللخلف.

بالإضافة إلى القياس الدقيق لوضعية التلامس وضغطها، يُدخِل بعض البيانات بقلم الشاشة تقوم الأجهزة أيضًا بالإبلاغ عن المسافة بين طرف قلم الشاشة وجهاز التحويل الرقمي، وزاوية إمالة قلم الشاشة، وزاوية اتجاه قلم الشاشة. يستطيع تطبيقك الاستعلام عن هذه المعلومات باستخدام getAxisValue() مع رموز المحور AXIS_DISTANCE وAXIS_TILT وAXIS_ORIENTATION.

لعرض أنواع الأدوات وحالات الأزرار ورموز المحور الجديدة، يمكن مراجعة TouchPaint في ApiDemos.

الخصائص

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

على سبيل المثال، إذا كنت تريد ضبط قيمة الحقل bar في الكائن foo، فيجب القيام بذلك سابقًا:

Kotlin

foo.bar = value

Java

foo.bar = value;

إذا أردت استدعاء دالة setter لحقل خاص أساسي bar، يمكنك إجراء إجراء ذلك:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

مع ذلك، إذا أردت تجاوز المثيل foo وضبط بعض الرموز الأخرى على bar، فلا توجد طريقة للقيام بذلك قبل الإصدار Android 4.0.

باستخدام الفئة Property، يمكنك الإعلان عن السمة Property. الكائن BAR في الفئة Foo بحيث يمكنك تعيين الحقل على مثيل foo الصف Foo على النحو التالي:

Kotlin

BAR.set(foo, value)

Java

BAR.set(foo, value);

تستفيد فئة View الآن من الفئة Property بهدف يمكنك ضبط حقول مختلفة، مثل خصائص التحويل التي تمت إضافتها في Android 3.0 (ROTATION وROTATION_X وTRANSLATION_X وما إلى ذلك).

تستخدِم الفئة ObjectAnimator أيضًا السمة Property. إذًا، يمكنك إنشاء ObjectAnimator باستخدام السمة Property، وهي أسرع وأكثر فعالية وأمانًا من السلسلة المستندة إلى السلسلة. الخاص بك.

تسريع الأجهزة

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

إذا لزم الأمر، يمكنك إيقاف ميزة "تسريع الأجهزة" يدويًا باستخدام hardwareAccelerated السمة لعناصر <activity> فردية أو <application> العنصر. بدلاً من ذلك، يمكنك إيقاف ميزة "تسريع الأجهزة" للملفات الشخصية الفردية من خلال الاتصال بالرقم setLayerType(LAYER_TYPE_SOFTWARE).

لمزيد من المعلومات حول تسريع الأجهزة، بما في ذلك قائمة بالرسم غير المتوافق العمليات، فراجع قسم الأجهزة مستند التسريع

تغييرات JNI

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

يتم وصف التفاصيل التفصيلية للمراجع المحلية لـ JNI في قسم "المراجع المحلية والعالمية" في مقالة نصائح مبادرة أخبار Google في Android 4.0، تم تحسين CheckJNI لرصد هذه الأخطاء. شاهِد مدوّنة مطوّري تطبيقات Android لمعرفة مشاركة قادمة. حول الأخطاء الشائعة في مراجع JNI وكيفية إصلاحها.

يؤثر هذا التغيير في تنفيذ JNI فقط على التطبيقات التي تستهدف الإصدار 4.0 من نظام التشغيل Android من خلال ضبط targetSdkVersion أو minSdkVersion إلى “14" أو أعلى. إذا ضبطت هذه السمات على أيّ قيمة أقل، فإن مراجع JNI المحلية تعمل بالطريقة نفسها التي تعمل بها في الإصدارات السابقة.

WebKit

  • تم تحديث WebKit إلى الإصدار 534.30
  • دعم الخطوط الهندية (الديفاناغارية والبنغالية والتاميلية، بما في ذلك دعم الأحرف المعقد مطلوب للجمع بين الرموز الرسومية) في WebView والمتصفّح المدمَج
  • إتاحة استخدام الخطوط الإثيوبية والجورجية والأرمينية باللغة WebView متصفح مضمّن
  • الدعم الذي يوفِّره WebDriver سيكون من الأسهل عليك اختبار التطبيقات التي تستخدم "WebView".

متصفح Android

يضيف تطبيق المتصفح الميزات التالية لتشغيل تطبيقات الويب:

الأذونات

في ما يلي الأذونات الجديدة:

  • ADD_VOICEMAIL: السماح لخدمة البريد الصوتي بإضافة بريد صوتي إرسال الرسائل إلى الجهاز.
  • BIND_TEXT_SERVICE: يجب أن تطلب الخدمة التي تنفّذ SpellCheckerService هذا الإذن بحد ذاتها.
  • BIND_VPN_SERVICE: يجب أن تطلب الخدمة التي تنفّذ VpnService هذا الإذن بحد ذاتها.
  • android.Manifest.permission#READ_PROFILE: يتيح هذا الإذن لمزوِّد ContactsContract.Profile إذن القراءة.
  • android.Manifest.permission#WRITE_PROFILE: لمنح موفِّر "ContactsContract.Profile" الإذن بالكتابة.

ميزات الجهاز

في ما يلي ميزات الجهاز الجديدة:

  • FEATURE_WIFI_DIRECT: إقرار بأنّ التطبيق الاستخدامات شبكة Wi-Fi للاتصالات من نظير إلى نظير.

للحصول على عرض تفصيلي لجميع تغييرات واجهة برمجة التطبيقات في Android 4.0 (مستوى واجهة برمجة التطبيقات 14)، يُرجى الاطّلاع على تقرير الاختلافات في واجهة برمجة التطبيقات.

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

بالإضافة إلى كل ما سبق، يتوافق Android 4.0 بشكل طبيعي مع جميع واجهات برمجة التطبيقات من الإصدارات السابقة. بما أن النظام الأساسي Android 3.x لا يتوفر إلا للأجهزة ذات الشاشات الكبيرة، فإذا كان لديك طورناها في المقام الأول للهواتف، إذًا قد لا تكون على دراية بجميع واجهات برمجة التطبيقات التي تمت إضافتها إلى نظام Android في هذه الإصدارات الحديثة.

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

Android 3.0
  • Fragment: هو مكوِّن لإطار العمل يتيح لك الفصل بين العناصر عناصر النشاط إلى وحدات مستقلة تحدد واجهة المستخدم ودورة الحياة الخاصة بها. يمكنك الاطّلاع على دليل المطوِّر الأجزاء.
  • ActionBar: بديل لشريط العنوان التقليدي أعلى نافذة النشاط. وهو يتضمن شعار التطبيق في الجانب الأيمن كما يقدم شعارًا جديدًا وواجهة لعناصر القائمة. يمكنك الاطّلاع على دليل مطوّري شريط الإجراءات.
  • Loader: مكوّن إطار عمل يسهِّل المحتوى غير المتزامن تحميل البيانات جنبًا إلى جنب مع مكونات واجهة المستخدم لتحميل البيانات ديناميكيًا بدون حظر السلسلة الرئيسية. يمكنك الاطّلاع على دليل المطوِّر الخاص بـ التحميلات.
  • حافظة النظام: يمكن للتطبيقات نسخ البيانات ولصقها (بخلاف النصوص فقط) من وإلى الحافظة على مستوى النظام. ويمكن أن تكون البيانات التي تم اقتصاصها نصًا عاديًا أو عنوان URI أو هدفًا. يمكنك الاطّلاع على دليل المطوِّر النسخ واللصق
  • السحب والإفلات: مجموعة من واجهات برمجة التطبيقات المضمنة في إطار العرض الذي يُسهل السحب والإفلات. العمليات التجارية. يمكنك الاطّلاع على دليل المطوِّرين حول ميزة السحب والإفلات.
  • هو إطار عمل مرن جديد تمامًا يتيح لك تحريك خصائص عشوائية لأي (عرض أو رسم أو جزء أو كائن أو أي شيء آخر) وتحديد جوانب الرسوم المتحركة مثل كمدة واستكمال وتكرار والمزيد. يتيح إطار العمل الجديد استخدام ميزة "الصور المتحركة" في Android أبسط من أي وقت مضى. يمكنك الاطّلاع على مطوّر برامج صور متحركة لموقع الويب الدليل.
  • رسومات RenderScript ومحرك الحوسبة: يوفر RenderScript إصدارًا ثلاثي الأبعاد عالي الأداء عرض الرسومات وواجهة برمجة التطبيقات Compute على المستوى الأصلي، والذي تكتبه في C (معيار C99) توفير نوع الأداء الذي تتوقعه من بيئة أصلية مع الاحتفاظ بإمكانية التنقل عبر العديد من وحدات المعالجة المركزية (CPU) ووحدات معالجة الرسومات (GPU) يمكنك الاطّلاع على مطوّر RenderScript الدليل.
  • رسومات ثنائية الأبعاد مسرَّعة على الجهاز: يمكنك الآن تفعيل عارض OpenGL التطبيق من خلال ضبط {android:hardwareAccelerated="true"} في <application> الخاص بعنصر البيان عنصر أو عنصر فردي لـ <activity> عناصر. هذه النتيجة من خلال تقديم صور متحركة أكثر سلاسة، وتمرير أكثر سلاسة، وتحسين أداء واستجابة للمستخدم بشكل عام التفاعل.

    ملاحظة: في حال ضبط السمة minSdkVersion أو targetSdkVersion في تطبيقك على يتم تفعيل ميزة "تسريع الأجهزة" تلقائيًا في "14" أو الإصدارات الأحدث.

  • والكثير غير ذلك. يُرجى الاطّلاع على نظام Android 3.0 الأساسي ملاحظات لمزيد من المعلومات.
Android 3.1
  • واجهات برمجة تطبيقات USB: واجهات برمجة تطبيقات جديدة وفعّالة لدمج الأجهزة الملحقة المتصلة مع تطبيقات Android. تعتمد واجهات برمجة التطبيقات على حزمة USB والخدمات التي مدمج في النظام الأساسي، بما في ذلك دعم كل من مضيف USB وتفاعلات الجهاز. راجِع دليل المطوِّر مضيف USB وملحقاته.
  • واجهات برمجة تطبيقات MTP/PTP: يمكن للتطبيقات التفاعل مباشرةً مع الكاميرات المتصلة وغيرها من PTP الأجهزة التي تتلقّى إشعارات عند توصيل الأجهزة وإزالتها، وإدارة الملفات ومساحة التخزين على ونقل الملفات والبيانات الوصفية منها وإليها. تنفذ MTP API بروتوكول PTP (بروتوكول نقل الصورة) مجموعة فرعية من مواصفات بروتوكول نقل الوسائط (MTP). يمكنك الاطّلاع على مستندات "android.mtp"
  • واجهات برمجة تطبيقات RTP: يعرض Android واجهة برمجة التطبيقات لحزمة RTP (بروتوكول النقل في الوقت الفعلي) المضمنة، التي يمكن للتطبيقات استخدامها لإدارة تدفق البيانات عند الطلب أو التفاعلي. وعلى وجه الخصوص، التطبيقات التي توفر بروتوكول الصوت على الإنترنت (VOIP) والدفع للتحدث وعقد المؤتمرات والبث الصوتي يمكنها استخدام واجهة برمجة التطبيقات (API) لبدء الجلسات ونقل مصادر البيانات أو استقبالها عبر أي شبكة متاحة. اطّلِع على مستندات "android.net.rtp".
  • دعم أذرع التحكم ومدخلات الحركة العامة الأخرى.
  • يُرجى الاطّلاع على نظام Android 3.1 الأساسي ملاحظات للعديد من واجهات برمجة التطبيقات الجديدة الأخرى.
Android 3.2
  • تتوافق الشاشات الجديدة مع واجهات برمجة التطبيقات التي تمنحك مزيدًا من التحكم في كيفية عمل تطبيقاتك المعروضة عبر أحجام مختلفة للشاشات. توسّع واجهة برمجة التطبيقات نموذج دعم الشاشة الحالي من خلال القدرة على استهداف نطاقات معينة لحجم الشاشة بدقة حسب الأبعاد، ويتم قياسها وحدات بكسل مستقلة الكثافة (مثل 600 بكسل مستقل الكثافة أو بعرض 720 بكسل مستقل الكثافة)، بدلاً من أحجام الشاشة (مثل كبيرة أو كبيرة جدًا). على سبيل المثال، يعد ذلك مهمًا لمساعدتك التمييز بين وجهاز مقاس 7 بوصة جهاز، والذي يتم جمعه عادةً على أنه "كبير" الشاشات. اطّلع على مشاركة المدونة، أدوات جديدة لإدارة أحجام الشاشة
  • ثوابت جديدة من <uses-feature> إلى الإفصاح عن متطلبات اتجاه الشاشة الأفقية أو العمودية
  • "حجم شاشة" الجهاز تتغير الآن الإعدادات أثناء اتجاه الشاشة التغيير. إذا كان تطبيقك يستهدف المستوى 13 أو أعلى من واجهة برمجة التطبيقات، يجب التعامل مع "screenSize". تغيير التهيئة إذا كنت تريد أيضًا التعامل مع تغيير إعداد "orientation". عرض android:configChanges للاطّلاع على مزيد من المعلومات
  • يُرجى الاطّلاع على نظام Android 3.2 الأساسي ملاحظات حول واجهات برمجة التطبيقات الجديدة الأخرى.

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

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

لاستخدام واجهات برمجة التطبيقات المقدمة في Android 4.0 في تطبيقك، يجب تجميع التطبيق على نظام Android الأساسي الذي يتوافق مع المستوى 14 أو أعلى. بناءً على احتياجاتك، قد تحتاج أيضًا إلى إضافة android:minSdkVersion="14" إلى سمة <uses-sdk> العنصر.

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