2012-03-07 40 views
19

Tôi biết câu hỏi có thể được coi là "chính trị không chính xác", nhưng tôi đang thiết kế một ứng dụng "theo thiết kế" phải thu hút sự chú ý của mọi người trong khoảng cách tối đa có thể, nếu không nó sẽ không được sử dụng ...: -)Android: cách phát nhạc ở mức tối đa có thể?

tôi hiện đang sử dụng lớp SoundManager, và đây là mã đóng ogg Clip của tôi:

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

vấn đề là âm lượng âm thanh tôi nhận được clip chơi với dường như là phụ thuộc bởi Cài đặt "Cài đặt/Âm thanh/Voulme" mà người dùng đã đặt. Thay vào đó nó dường như là độc lập bởi các thiết lập nút âm lượng phần cứng.

Có cách nào để ứng dụng Android phát âm thanh với khối lượng vật lý tối đa được thiết bị cho phép không?

Trả lời

38

tôi muốn đề nghị sử dụng getStreamMaxVolume và setStreamVolume để làm điều này:

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

Sau đó, một khi bạn đã hoàn thành chỉ cần đặt nó trở lại với khối lượng ban đầu.

Tôi nghĩ rằng tôi đã bị đánh đến những cú đấm, ahh tốt :)

Một số mã mà thực hiện điều này, tôi đang sử dụng MediaPlayer chứ không phải là Soundpool vì điều này mang đến cho bạn một vở kịch callback hoàn chỉnh mà không làm dường như có mặt trên Soundpool:

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); 
    } 
}); 

Btw với cuộc gọi mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); các giá trị streamVolume đang thực sự nổi 0 -> 1 đại diện cho một tỷ lệ phần trăm của giá trị lớn nhất, do đó bạn sẽ thực sự chỉ muốn đưa vào 1.0f đó.

+0

Có, bạn đã ... ;-) Nhưng tôi thích ý tưởng khôi phục âm lượng ban đầu, vì vậy khi ứng dụng được đóng (hoặc bị giết), người dùng đã đặt lại âm lượng ... – MarcoS

+0

Chỉ cần chỉnh sửa nó, tôi không không nghĩ rằng bạn thực sự cần phải thay đổi âm lượng bạn chỉ cần sử dụng âm lượng tối đa hơn là giảm âm lượng khi chơi nó. – zeetoobiker

+0

Vâng, thậm chí còn tốt hơn ... Cảm ơn ... – MarcoS

4

Bạn có thể điều chỉnh cài đặt trước khi phát âm thanh.

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

là AudioManager.getStreamMaxVolume() indipendent Các bước cài đặt bất kỳ của người dùng? Đây có phải là khối lượng vật lý tối đa của thiết bị không? – MarcoS

+0

Nó thực sự thay đổi cài đặt người dùng, vì vậy có. – 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

bạn dừng sau khi phát hành? –

-1

Đó là mã sai.

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

Mã của bạn phải nằm trong phần nhận xét. –

1

Cả hai mã làm việc cho tôi nhưng tôi thích một từ 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(); 
}); 
Các vấn đề liên quan