2012-03-07 10 views
19

मुझे पता है कि प्रश्न को "राजनीतिक रूप से गलत" माना जा सकता है, लेकिन मैं एक ऐप तैयार कर रहा हूं जो "डिजाइन द्वारा" अधिकतम संभव दूरी सीमा के भीतर लोगों का ध्यान रखना चाहिए, अन्यथा इसका उपयोग नहीं किया जाएगा ...: -)एंड्रॉइड: अधिकतम संभव मात्रा में संगीत कैसे खेलें?

मैं वर्तमान में SoundManager वर्ग का उपयोग कर रहा है, और इस कोड है जो मेरे ogg क्लिप निभाता है:

public void playSound(int index) { 
    int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
    mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); 
} 

समस्या यह है कि ध्वनि की मात्रा मैं के साथ खेला क्लिप प्राप्त द्वारा निर्भर होता है है उपयोगकर्ता द्वारा सेट की गई सेटिंग्स/ऑडियो/वोल्मे "सेटिंग्स। इसके बजाय यह हार्डवेयर वॉल्यूम बटन सेटिंग द्वारा अनिवार्य प्रतीत होता है।

क्या एंड्रॉइड ऐप डिवाइस द्वारा अनुमत अधिकतम भौतिक मात्रा में ध्वनि चलाने का कोई तरीका है?

उत्तर

38

मैं यह करने के getStreamMaxVolume और setStreamVolume उपयोग करने का सुझाव चाहते हैं।

मुझे लगता है मैं पंच को पीटा गया था, आह अच्छी तरह से :)

कुछ कोड है कि वास्तव में यह करता है, मैं MediaPlayer उपयोग कर रहा हूँ बल्कि soundpool की तुलना में यह आप एक नाटक पूरा कॉलबैक जो नहीं है देता है soundpool पर उपस्थित होना दिखाई देते हैं: कॉल mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); साथ Btw

final AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 
MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mp.setDataSource("content://media/internal/audio/media/97"); 
mp.prepare(); 
mp.start(); 
mp.setOnCompletionListener(new OnCompletionListener() 
{ 
    @Override 
    public void onCompletion(MediaPlayer mp) 
    { 
     mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0); 
    } 
}); 

streamVolume मान वास्तव में तैरता हैं 0 -> 1 है कि अधिकतम मूल्य के एक प्रतिशत का प्रतिनिधित्व करते हैं, ताकि आप वास्तव में सिर्फ 1.0f में डाल करना चाहते हैं क्या आप वहां मौजूद हैं।

+0

हाँ, आप थे ... ;-) लेकिन मुझे मूल वॉल्यूम को पुनर्स्थापित करने का विचार पसंद है, इसलिए जब ऐप बंद हो जाता है (या मारे गए) उपयोगकर्ता के पास उसकी वॉल्यूम फिर से सेट हो जाती है ... – MarcoS

+0

बस इसे संपादित किया गया, मैं नहीं करता ऐसा नहीं लगता कि आपको वास्तव में उस वॉल्यूम को बदलने की जरूरत है जिसे आपको इसे कम करते समय कम मात्रा की बजाय अधिकतम मात्रा का उपयोग करने की आवश्यकता है। – zeetoobiker

+0

हां, यह भी बेहतर है ... धन्यवाद ... – MarcoS

4

आप ऑडियो चलाने से पहले सेटिंग्स को समायोजित कर सकते हैं। तब

int origionalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 

एक बार आप इसे वापस मूल मात्रा करने के लिए सेट काम हो गया:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0); 
+0

AudioManager.getStreamMaxVolume() किसी भी उपयोगकर्ता की सेटिंग के स्वतंत्र है? क्या यह डिवाइस की अधिकतम भौतिक मात्रा है? – MarcoS

+0

यह वास्तव में उपयोगकर्ता सेटिंग बदलता है, तो हाँ। – josephus

1
float count=100*.01f; 

MediaPlayer mp=new MediaPlayer(); 

mp.setLooping(false);  
      mp = MediaPlayer.create(ActivityName.this, myUri); 

      mp.setVolume(count,count); 
      mp.start(); 
mp.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
           mp.release(); 
       mp.stop(); 
      } 
     }); 
+1

रिलीज के बाद आप रोक रहे हैं? –

-1

यह गलत कोड है।

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
          audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 
+1

आपका कोड टिप्पणियों में होना चाहिए। –

1

इन कोड के दोनों मेरे लिए काम किया, लेकिन मैं MediaPlayer

से एक पसंद करते हैं
AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND); 

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
MediaPlayer mp=new MediaPlayer(); 
mp.setLooping(false); 
mp = MediaPlayer.create(HomeActivity.this, notification); 
mp.setVolume(count,count); 
mp.start(); 
}); 
संबंधित मुद्दे