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

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

launchOutputSelection() तरीका, जो होरोलॉजिस्ट लाइब्रेरी का हिस्सा है 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. setSuppress प्लेबैकOnUnsuitableOutput(true) पर कॉल करें ExoPlayer इंस्टेंस बनाते समय:

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

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

हॉरोलॉजिस्ट मीडिया टूलकिट

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

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

  • पक्का करें कि मीडिया ऑडियो प्लेबैक तब तक शुरू न हो, जब तक कि हेडसेट या बाहरी स्पीकर के सेट जैसा कोई आउटपुट डिवाइस, स्मार्टवॉच से कनेक्ट न हो. मीडिया ऐप्लिकेशन के लिए सही आउटपुट डिवाइस देखने के लिए नीचे दी गई सूची देखें:
  • अगर AudioManager आपके ऐप्लिकेशन को सूचना देता है कि कोई बाहरी ऑडियो आउटपुट डिवाइस स्मार्टवॉच से डिसकनेक्ट हो जाता है, तो वीडियो चलाना रोकें.
  • अगर उपयोगकर्ता ने मीडिया चलाने की कोशिश की है, लेकिन किसी बाहरी ऑडियो डिवाइस से कनेक्ट नहीं किया है, तो उसे अपनी स्मार्टवॉच से कनेक्ट करने के लिए कहें.