يوضّح هذا الدليل كيف يمكن للتطبيقات على Wear OS استخدام واجهات برمجة تطبيقات Android المألوفة لتشغيل الصوت.
رصد الأجهزة الصوتية
يجب أن يتأكّد تطبيق Wear OS أولاً من أنّ الجهاز القابل للارتداء يتضمّن مخرجًا صوتيًا مناسبًا. يمكن للمطوّرين توقُّع توفُّر أحد خيارات إخراج الصوت التالية على الأقل في الأجهزة القابلة للارتداء:
-
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: على الأجهزة التي تتضمّن مكبّر صوت مدمجًا AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: عند إقران سماعة رأس بلوتوث وتوصيلهاAudioDeviceInfo.TYPE_BLE_BROADCAST
: عند إقران جهاز مجموعة بث بلوتوث منخفض الطاقة (BLE) وتوصيلهAudioDeviceInfo.TYPE_BLE_HEADSET
: عند إقران سماعة رأس بتقنية BLE وتوصيلها-
AudioDeviceInfo.TYPE_BLE_SPEAKER
: عند إقران مكبّر صوت بتقنية BLE وتوصيله
في المثال التالي، يستخدم التطبيق الطريقة
getDevices()
بالاقتران مع قيمة FEATURE_AUDIO_OUTPUT
لتعداد جميع مخرجات الصوت.
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); fun audioOutputAvailable(type: Int): Boolean { if (!packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) { return false } return audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { it.type == type } } // True if the device has a speaker audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) // True if a Bluetooth headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) // True if a BLE broadcast group device is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) // True if a BLE headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) // True if a BLE speaker is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
لتقديم أفضل تجربة للمستخدم، يجب أن يحرص تطبيقك على تشغيل الوسائط فقط عند توصيل سمّاعات رأس أو مكبّرات صوت تعمل بتقنية البلوتوث بالساعة.
اختيار الجهاز المفضّل لإخراج الصوت
استنادًا إلى حالة استخدام تطبيقك وأهمية الصوت في تجربة الاستخدام الأساسية للتطبيق، اختَر الطريقة التي تريد أن يتفاعل بها المستخدمون مع مخرجات الصوت في تطبيقك.
السماح للمستخدم باختيار جهاز إخراج الوسائط
بدءًا من Wear OS 5، يوفّر النظام واجهة مستخدم تتيح للمستخدمين اختيار الجهاز الذي سيتم تشغيل الوسائط عليه وعرض معلومات حول محتوى الوسائط الذي يتم تشغيله حاليًا.
إذا رصد تطبيقك عدم توفّر سماعة بلوتوث متصلة عندما تريد تشغيل الصوت على الأجهزة التي تعمل بنظام التشغيل Wear OS 5 أو الإصدارات الأحدث، يمكنك أن تعرض على المستخدم الانتقال مباشرةً إلى أداة تبديل إخراج الوسائط. على الأجهزة التي لا تتوافق مع أداة تبديل إخراج الوسائط، استخدِم إجراء intent ACTION_BLUETOOTH_SETTINGS
، الذي ينقل المستخدم إلى صفحة البلوتوث في إعدادات النظام.
توضّح الطريقة launchOutputSelection()
، وهي جزء من مكتبة Horologist
على GitHub، كيفية السماح للمستخدم باختيار جهاز إخراج الوسائط.
سماعة رأس بلوتوث
على عكس مكبّرات الصوت المدمجة التي تكون متاحة دائمًا إذا كانت متوفرة على الجهاز، يمكن إقران سماعة بلوتوث أو إلغاء إقرانها أثناء تشغيل أحد التطبيقات. إذا كان التطبيق يتطلّب استخدام سماعة رأس لمواصلة العمل،
سجِّل دالة ردّ الاتصال لرصد وقت توصيل المستخدم سماعة رأس بلوتوث وفصلها باستخدام
registerAudioDeviceCallback
:
audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesAdded(addedDevices) if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)) { // A Bluetooth or BLE device is connected and available for playback. } } override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesRemoved(removedDevices) if (!(audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER))) { // No Bluetooth or BLE devices are connected anymore. } } }, null)
إذا رصد تطبيقك عدم توفّر سماعة رأس بلوتوث متصلة عند الرغبة في توفير مخرجات صوتية، لا تعرض رسالة خطأ. بدلاً من ذلك، يمكنك أن تعرض على المستخدم الانتقال مباشرةً إلى إعدادات البلوتوث
لتسهيل عملية الربط. يمكن إجراء ذلك عن طريق إرسال هدف مع
ACTION_BLUETOOTH_SETTINGS
:
val intent = with (Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) putExtra("EXTRA_CONNECTION_ONLY", true) putExtra("EXTRA_CLOSE_ON_CONNECT", true) putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1) } startActivity(intent)
مكبرات الصوت المدمجة
تتضمّن معظم أجهزة Wear OS مكبّرات صوت مدمجة. إذا كان تطبيقك يقدّم حالة استخدام غير مرتبطة بالوسائط وتتضمّن صوتًا، ننصحك باستخدام مكبّرات الصوت لتقديم بُعد إضافي من التفاعل مع المستخدم. على سبيل المثال، قد يفعّل جهاز Wear OS مزوّد بسمّاعة منبّه الساعة أو المؤقت، مع إشعار صوتي، وقد تستخدم تطبيقات اللياقة البدنية السمّاعة لتقديم تعليمات التمارين.
ملاحظة: لا توفّر مكبّرات الصوت المضمّنة أفضل تجربة للاستماع إلى محتوى الوسائط، لأنّها غير مصمَّمة لهذا الغرض.
يمكنك الرجوع إلى WearSpeakerSample للاطّلاع على التفاصيل.
تشغيل الصوت
بعد رصد مصدر إخراج صوتي مناسب واختياره، تكون عملية تشغيل الصوت على Wear OS هي نفسها كما هو الحال على الأجهزة الجوّالة أو الأجهزة الأخرى. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على MediaPlayer. للوصول بسهولة أكبر إلى الميزات الأكثر تقدّمًا، مثل بث الوسائط وتنزيلها، استخدِم ExoPlayer. احرص على اتّباع أفضل الممارسات لتطبيقات الصوت، مثل إدارة تركيز الصوت.
منع تشغيل الوسائط غير المقصود من خلال مكبّرات الصوت المضمّنة
يمكن لتطبيقات الوسائط اتّباع الإرشادات التالية للتأكّد من أنّ التطبيق لا يشغّل محتوى الوسائط بدون قصد على مكبّرات الصوت المدمجة في الساعة. تختلف الإرشادات استنادًا إلى المشغّل الذي يستخدمه التطبيق.
ExoPlayer
إذا كان تطبيقك يستخدم ExoPlayer:
استدعِ الدالة setSuppressPlaybackOnUnsuitableOutput(true) أثناء إنشاء مثيل ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
يمكنك الاستجابة لحدث منع التشغيل من خلال تسجيل WearUnsuitableOutputPlaybackSuppressionResolverListener كأداة معالجة لنموذج ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
تحتوي Horologist MediaToolkit حاليًا على منطق لمنع تشغيل الوسائط غير المقصود على مكبّرات الصوت المدمجة في الساعة.
مشغّلات الوسائط الأخرى
- تأكَّد من عدم بدء تشغيل صوت الوسائط إلا إذا كان هناك جهاز إخراج مناسب، مثل سمّاعة رأس أو مجموعة من مكبّرات الصوت الخارجية، متصلة بالساعة. اطّلِع على القائمة التالية لمعرفة أجهزة الإخراج المناسبة لتطبيقات الوسائط:
- أوقِف التشغيل مؤقتًا إذا أرسل AudioManager إشعارًا إلى تطبيقك بأنّه تم فصل جهاز إخراج الصوت الخارجي عن الساعة.
- عندما يحاول المستخدم بدء تشغيل الوسائط ولكنّه لم يوصّل جهاز صوت خارجيًا، اطلب منه توصيل جهاز من هذا النوع بساعته.