ऑडियो आउटपुट में होने वाले बदलावों को मैनेज करना

उपयोगकर्ता उम्मीद करते हैं कि वे ऑडियो ऐप्लिकेशन की आवाज़ कंट्रोल कर पाएंगे. स्टैंडर्ड बिहेवियर में आवाज़ कम या ज़्यादा करने की सुविधा (जैसे, उस पर मौजूद बटन या नॉब) करने के लिए उपलब्ध कराया जाता है. साथ ही, अगर स्क्रीन पर कोई हेडफ़ोन जैसे सहायक डिवाइस, इस्तेमाल करते समय डिसकनेक्ट हो जाते हैं.

वॉल्यूम कंट्रोल का इस्तेमाल करना

जब कोई उपयोगकर्ता किसी गेम या संगीत ऐप्लिकेशन में आवाज़ बटन दबाता है, तो वॉल्यूम बदलाव हो जाए, भले ही प्लेयर को गानों के बीच में रोक दिया गया हो या गाने के लिए कोई संगीत न हो गेम की मौजूदा जगह की जानकारी ऐक्सेस कर सकता है.

संगीत, अलार्म, सूचनाएं, इनकमिंग कॉल रिंगर, सिस्टम की आवाज़ें, कॉल के दौरान आवाज़, और DTMF टोन. इसकी मदद से उपयोगकर्ता, हर स्ट्रीम के वॉल्यूम को अलग से कंट्रोल कर सकते हैं.

डिफ़ॉल्ट रूप से, आवाज़ कम या ज़्यादा करने वाला बटन दबाने से, चल रहे ऑडियो की आवाज़ में बदलाव होता है स्ट्रीम. अगर फ़िलहाल आपका ऐप्लिकेशन कुछ नहीं चला रहा है, तो आवाज़ बटन को दबाकर रखें संगीत की आवाज़ (या Android 9 से पहले के रिंगर की आवाज़) को कम या ज़्यादा करता है.

अगर आपका ऐप्लिकेशन अलार्म क्लॉक में नहीं है, तो आपको ऑडियो का इस्तेमाल करते रहना चाहिए AudioAttributes.USAGE_MEDIA.

आवाज़ कम या ज़्यादा करने के लिए, तो आपको इस पर कॉल करना चाहिए setVolumeControlStream() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है आपके एट्रिब्यूट से मेल खाने वाली स्ट्रीम टाइप पास कर रहा हो, ताकि आप डेटा को वापस पा सकें AudioAttributes.getVolumeControlStream.

Kotlin

setVolumeControlStream(AudioManager.STREAM_MUSIC)

Java

setVolumeControlStream(AudioManager.STREAM_MUSIC);

इस कॉल को अपने ऐप्लिकेशन के लाइफ़साइकल में करें. आम तौर पर, onResume() से आपके मीडिया को कंट्रोल करने वाली गतिविधि या फ़्रैगमेंट का कोई दूसरा तरीका चुनें. यह कनेक्ट होता है टारगेट गतिविधि या फ़्रैगमेंट के दौरान, वॉल्यूम कंट्रोल को STREAM_MUSIC पर सेट किया जाता है दिखाई दे.

प्रोग्राम के हिसाब से, स्ट्रीम वॉल्यूम को कंट्रोल करना

बहुत कम मामलों में, किसी ऑडियो स्ट्रीम के वॉल्यूम को प्रोग्राम के हिसाब से सेट किया जा सकता है. इसके लिए उदाहरण के लिए, जब आपका ऐप्लिकेशन किसी मौजूदा यूज़र इंटरफ़ेस (यूआई) को बदलता है. इसका सुझाव नहीं दिया जाता है, क्योंकि Android AudioManager, एक ही तरह की सभी ऑडियो स्ट्रीम को एक साथ मिलाता है. इन तरीकों से, स्ट्रीम का इस्तेमाल करने वाले हर ऐप्लिकेशन का वॉल्यूम कम या ज़्यादा हो जाता है. इस्तेमाल करने से बचें उनसे:

फ़िक्स्ड वॉल्यूम वाले डिवाइसों के साथ काम करना

कुछ डिवाइसों (जैसे कि Chromebook) में आवाज़ कंट्रोल करने की सुविधा होती है, लेकिन वे ऐप्लिकेशन को AudioManager का इस्तेमाल नहीं करने देते ऑडियो स्ट्रीम का लेवल बदलने के लिए ऊपर बताए गए तरीके का इस्तेमाल करें. इन्हें कहा जाता है फ़िक्स्ड वॉल्यूम वाले डिवाइस. आपको पता चलेगा कि क्या तय वॉल्यूम वाले डिवाइस पर isVolumeFixed() को कॉल करके ऐप्लिकेशन चलाया जा रहा है.

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

खिलाड़ी Method
ऑडियो ट्रैक AudioTrack.setVolume()
मीडिया प्लेयर MediaPlayer.setVolume()
ExoPlayer पहले से मौजूद AudioTrack की आवाज़ को सेट करने के लिए, SimpleExoPlayer.setVolume() का इस्तेमाल करें.

शोर न करें

ऑडियो का आनंद लेने के लिए, लोगों के पास कई विकल्प होते हैं Android डिवाइसेस. ज़्यादातर डिवाइसों में पहले से स्पीकर, हेडफ़ोन जैक वायर वाले हेडसेट, और कई ऐसे हेडसेट होते हैं जिनमें ब्लूटूथ कनेक्टिविटी और सपोर्ट की सुविधा होती है A2DP ऑडियो.

हेडसेट के अनप्लग होने या ब्लूटूथ डिवाइस के डिसकनेक्ट होने पर, ऑडियो स्ट्रीम फिर से अपने-आप बिल्ट-इन स्पीकर पर ले जाता है. अगर आपको तेज़ आवाज़ में संगीत सुनना है, तो आवाज़ हो सकती है, तो यह चौंका देने वाला माहौल हो सकता है.

आम तौर पर, लोग ऐसे ऐप्लिकेशन की उम्मीद करते हैं जिनमें स्क्रीन पर संगीत चलाने की सुविधा वाला म्यूज़िक प्लेयर शामिल हो कंट्रोल का इस्तेमाल करें. दूसरे ऐप्लिकेशन, जैसे कि वे गेम जो कंट्रोल शामिल करना चाहिए, तो आपको खेलना जारी रखना चाहिए. उपयोगकर्ता आवाज़ को कम या ज़्यादा करने के लिए, के हार्डवेयर कंट्रोल पर जाएं.

जब ऑडियो आउटपुट, पहले से मौजूद स्पीकर पर वापस स्विच हो जाता है, तो सिस्टम ACTION_AUDIO_BECOMING_NOISY को ब्रॉडकास्ट करता है इंटेंट. आपको एक BroadcastReceiver बनाना चाहिए जो आपके ऑडियो चलाने पर इस इंटेंट को सुनता है. रिसीवर इस तरह दिखना चाहिए:

Kotlin

private class BecomingNoisyReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) {
            // Pause the playback
        }
    }
}

Java

private class BecomingNoisyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
          // Pause the playback
      }
    }
}

जब आप प्लेबैक शुरू करते हैं तो रिसीवर को पंजीकृत करें, और बंद करने पर उसका पंजीकरण रद्द करें. अगर इस गाइड में बताए गए तरीके के हिसाब से अपना ऐप्लिकेशन डिज़ाइन किया जाता है, तो ये कॉल onPlay() और onStop() मीडिया सेशन कॉलबैक में.

Kotlin

private val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)
private val myNoisyAudioStreamReceiver = BecomingNoisyReceiver()

private val callback = object : MediaSessionCompat.Callback() {

    override fun onPlay() {
        registerReceiver(myNoisyAudioStreamReceiver, intentFilter)
    }

    override fun onStop() {
        unregisterReceiver(myNoisyAudioStreamReceiver)
    }
}

Java

private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver();

MediaSessionCompat.Callback callback = new
MediaSessionCompat.Callback() {
  @Override
  public void onPlay() {
    registerReceiver(myNoisyAudioStreamReceiver, intentFilter);
  }

  @Override
  public void onStop() {
    unregisterReceiver(myNoisyAudioStreamReceiver);
  }
}