เปิดเสียงบนอุปกรณ์ที่สวมใส่ได้

คู่มือนี้อธิบายวิธีที่แอปใน Wear OS ใช้ API ของ Android ที่คุ้นเคยเพื่อเล่นเสียง

ตรวจหาอุปกรณ์เสียง

แอป Wear OS ต้องตรวจสอบก่อนว่าอุปกรณ์ที่สวมใส่ได้มีเอาต์พุตเสียงที่เหมาะสมหรือไม่ นักพัฒนาแอปสามารถคาดหวังว่าอุปกรณ์ที่สวมใส่ได้จะมีเอาต์พุตเสียงต่อไปนี้อย่างน้อย 1 เอาต์พุต

ในตัวอย่างต่อไปนี้ แอปใช้ 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 ระบบจะแสดง UI ที่ให้ผู้ใช้เลือกได้ว่าจะให้ อุปกรณ์ควรเปิดสื่อและแสดงข้อมูลเกี่ยวกับสื่อที่กำลังเล่นอยู่ เนื้อหา

หากแอปตรวจพบว่าไม่มีชุดหูฟังบลูทูธเชื่อมต่ออยู่เมื่อคุณต้องการ ในการเล่นเสียงบนอุปกรณ์ที่ใช้ Wear OS 5 ขึ้นไป ให้เสนอที่จะ ผู้ใช้ไปยังตัวสลับเอาต์พุตสื่อโดยตรง ในอุปกรณ์ที่ไม่รองรับ ตัวสลับเอาต์พุตสื่อ เรียกใช้ Intent ACTION_BLUETOOTH_SETTINGS ซึ่งจะนำผู้ใช้ไปยังหน้าบลูทูธในการตั้งค่าระบบ

เมธอด launchOutputSelection() ซึ่งเป็นส่วนหนึ่งของไลบรารี Horologist ใน GitHub จะสาธิตวิธีการให้ผู้ใช้เลือกอุปกรณ์เอาต์พุตสื่อ

ชุดหูฟังบลูทูธ

ชุดหูฟังบลูทูธต่างจากลำโพงในตัวซึ่งพร้อมใช้งานเสมอหากมีอยู่ในอุปกรณ์ สามารถจับคู่หรือเลิกจับคู่ได้ขณะที่แอปทำงาน หากแอปต้องใช้ชุดหูฟังเพื่อดำเนินการต่อ ลงทะเบียน Callback เพื่อตรวจจับเมื่อ ผู้ใช้เชื่อมต่อและยกเลิกการเชื่อมต่อชุดหูฟังบลูทูธโดยใช้ 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)
  

หากแอปตรวจพบว่าไม่มีชุดหูฟังบลูทูธเชื่อมต่ออยู่เมื่อคุณต้องการให้บริการเสียง ไม่ต้องแสดงข้อความแสดงข้อผิดพลาด ให้เสนอที่จะพาผู้ใช้ไปยังการตั้งค่าบลูทูธโดยตรงแทน ทำให้เชื่อมต่อได้ง่ายขึ้น ซึ่งสามารถทำได้โดยการส่ง Intent ไปยัง 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. ดำเนินการกับเหตุการณ์การระงับการเล่นโดยการลงทะเบียน WearUnJustableOutputPlaybackSuppressionReachrListener ในฐานะผู้ฟังอินสแตนซ์ ExoPlayer

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

ชุดเครื่องมือ Horologist

Horologist MediaToolkit มีตรรกะสำหรับป้องกันการเล่นสื่อโดยไม่ได้ตั้งใจบนลำโพงนาฬิกาในตัวอยู่แล้ว

มีเดียเพลเยอร์อื่นๆ

  • ตรวจสอบว่าการเล่นเสียงจากสื่อจะไม่เริ่มเล่นเว้นแต่ว่าจะมีการเชื่อมต่ออุปกรณ์เอาต์พุตที่เหมาะสม เช่น ชุดหูฟังหรือชุดลำโพงภายนอกเข้ากับนาฬิกา ดูรายการต่อไปนี้สำหรับอุปกรณ์เอาต์พุตที่เหมาะกับแอปสื่อ
  • หยุดเล่นชั่วคราวหาก AudioManager แจ้งแอปของคุณว่าอุปกรณ์เอาต์พุตเสียงภายนอกถูกตัดการเชื่อมต่อจากนาฬิกา
  • เมื่อผู้ใช้พยายามเริ่มเล่นสื่อแต่ยังไม่ได้เชื่อมต่ออุปกรณ์เสียงภายนอก ให้แจ้งให้ผู้ใช้เชื่อมต่ออุปกรณ์ดังกล่าวกับนาฬิกา