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

يوضّح هذا الدليل كيف يمكن للتطبيقات على 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)

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

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

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

سماعة رأس بلوتوث

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

تسجيل معاودة الاتصال لرصد وقت اتصال المستخدم بسماعة رأس بلوتوث وقطع اتصالها باستخدام 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. استدعِ setSuppressPlaybackOnUn حسابكِunable المعروضة(true) أثناء إنشاء مثيل ExoPlayer:

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

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

مجموعة أدوات وسائط الإعلام

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

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