पहने जाने वाले डिवाइसों पर ऑडियो चलाएं

कीवर्ड: wear, media, collection_guideslandingwear

इस गाइड में बताया गया है कि Wear OS पर मौजूद ऐप्लिकेशन, ऑडियो चलाने के लिए Android के सामान्य एपीआई का इस्तेमाल कैसे कर सकते हैं.

ऑडियो डिवाइसों का पता लगाना

Wear OS ऐप्लिकेशन को पहले यह पता लगाना होगा कि स्मार्टवॉच में सही ऑडियो आउटपुट है या नहीं. डेवलपर को उम्मीद है कि स्मार्टवॉच में इनमें से कम से कम एक ऑडियो आउटपुट उपलब्ध होगा:

  • AudioDeviceInfo.TYPE_BUILTIN_SPEAKER: उन डिवाइसों पर जिनमें पहले से स्पीकर मौजूद है
  • AudioDeviceInfo.TYPE_BLUETOOTH_A2DP: जब ब्लूटूथ हेडसेट को जोड़ा और कनेक्ट किया गया हो
  • AudioDeviceInfo.TYPE_BLE_BROADCAST: जब ब्लूटूथ स्मार्ट (बीएलई) ब्रॉडकास्ट ग्रुप डिवाइस को जोड़ा गया हो और कनेक्ट किया गया हो
  • AudioDeviceInfo.TYPE_BLE_HEADSET: जब कोई बीएलई हेडसेट जोड़ा गया हो और कनेक्ट हो
  • AudioDeviceInfo.TYPE_BLE_SPEAKER: जब BLE स्पीकर को जोड़ा और कनेक्ट किया जाता है

नीचे दिए गए उदाहरण में, ऐप्लिकेशन सभी ऑडियो आउटपुट की गिनती करने के लिए, FEATURE_AUDIO_OUTPUT की वैल्यू के साथ getDevices() के तरीके का इस्तेमाल करता है.

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 या उसके बाद के वर्शन वाले डिवाइसों पर ऑडियो चलाने के लिए, कोई ब्लूटूथ हेडसेट कनेक्ट नहीं है, तो उपयोगकर्ता को सीधे मीडिया आउटपुट स्विचर पर ले जाने का सुझाव दें. जिन डिवाइसों पर मीडिया आउटपुट स्विचर काम नहीं करता उन पर ACTION_BLUETOOTH_SETTINGS इंटेंट ऐक्शन को चालू करें. इससे उपयोगकर्ता को सिस्टम सेटिंग में ब्लूटूथ पेज पर ले जाया जाता है.

GitHub पर मौजूद Horologist लाइब्रेरी का हिस्सा, launchOutputSelection() तरीका बताता है कि उपयोगकर्ता को मीडिया आउटपुट डिवाइस चुनने का विकल्प कैसे दिया जा सकता है.

ब्लूटूथ हेडसेट

डिवाइस में पहले से मौजूद स्पीकर हमेशा उपलब्ध रहते हैं. हालांकि, ब्लूटूथ हेडफ़ोन को ऐप्लिकेशन के चलने के दौरान जोड़ा या हटाया जा सकता है. अगर ऐप्लिकेशन को हेडसेट की ज़रूरत है, तो 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. ExoPlayer इंस्टेंस बनाते समय, setSuppressPlaybackOnUnsuitableOutput(true) को कॉल करें:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. WearUnsuitableOutputPlaybackSuppressionResolverListener को ExoPlayer इंस्टेंस के लिसनर के तौर पर रजिस्टर करके, वीडियो चलाने से रोकने के इवेंट पर प्रतिक्रिया दें:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Horologist Media टूलकिट

Horologist MediaToolkit में पहले से ही लॉजिक मौजूद है, ताकि स्मार्टवॉच में पहले से मौजूद स्पीकर पर अनचाहे मीडिया को चलाने से रोका जा सके.

अन्य मीडिया प्लेयर