تشغيل الصوت على الأجهزة القابلة للارتداء

keywords: wear, media, collection_guideslandingwear

يوضّح هذا الدليل كيفية استخدام التطبيقات على نظام التشغيل Wear OS لواجهات برمجة تطبيقات Android المألوفة لتشغيل الصوت.

رصد أجهزة الصوت

يجب أن يرصد تطبيق Wear OS أولاً ما إذا كان الجهاز القابل للارتداء مزوّدًا بمخرج صوت مناسب. يمكن للمطوّرين توقّع توفّر أحد مخرجات الصوت التالية على الأقل في الأجهزة القابلة للارتداء:

في المثال التالي، يستخدم التطبيق الأسلوب 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)

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

اختيار الجهاز المفضَّل لإخراج الصوت

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

السماح للمستخدم باختيار جهاز إخراج الوسائط

بدءًا من الإصدار 5 من Wear OS، يقدّم النظام واجهة مستخدم تتيح للمستخدمين اختيار الجهاز الذي سيتم تشغيل الوسائط عليه وعرض معلومات عن محتوى الوسائط المشغّل حاليًا.

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

  1. استخدِم setSuppressPlaybackOnUnsuitableOutput(true) أثناء إنشاء مثيل ExoPlayer:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. يمكنك التفاعل مع حدث إيقاف التشغيل من خلال تسجيل WearUnsuitableOutputPlaybackSuppressionResolverListener كأداة معالجة لمثيل ExoPlayer:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

مجموعة أدوات Horologist Media

يحتوي Horologist MediaToolkit على منطق لمنع تشغيل الوسائط غير المقصود على مكبّرات صوت الساعة المدمجة.

مشغّلات الوسائط الأخرى