2012-03-07 11 views
19

Wiem, że pytanie można uznać za "niepoprawne politycznie", ale projektuję aplikację, która "od samego początku" musi przyciągać uwagę ludzi w maksymalnym możliwym zakresie odległości, w przeciwnym razie nie będzie używana ...: -)Android: jak odtwarzać muzykę przy maksymalnej możliwej głośności?

obecnie używam klasy SoundManager, a to jest mój kod, który odgrywa ogg Filmu:

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

problemem jest to, że poziom głośności pojawia się klip odtwarzany z wydaje się być zależny od Ustawienia "Ustawienia/Audio/Voulme" ustawione przez użytkownika. Zamiast tego wydaje się, że jest niezależny od ustawień sprzętowych przycisków głośności.

Czy istnieje możliwość, aby aplikacja dla systemu Android odtwarzała dźwięk na maksymalną głośność fizyczną dozwoloną przez urządzenie?

Odpowiedz

38

Sugeruję użyciu getStreamMaxVolume i setStreamVolume to zrobić:

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

Potem raz skończysz wystarczy ustawić go z powrotem do pierwotnej objętości.

myślę, że został pobity na stemplu, ahh dobrze :)

Niektóre kod, który faktycznie robi to, używam MediaPlayer zamiast soundpool jak to daje pełną zabaw zwrotnego, który nie wydają się być obecny na 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 z rozmowy mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); wartości streamVolume są rzeczywiście unosi 0 -> 1, które stanowią pewien procent wartości maksymalnej, więc tak naprawdę tylko chcesz umieścić w 1.0f tam.

+0

Tak, byłeś ... ;-) Ale podoba mi się pomysł przywrócenia oryginalnego woluminu, więc kiedy aplikacja jest zamknięta (lub zabita), użytkownik ma ponownie ustawiony głośność ... – MarcoS

+0

Po prostu to edytowałem, ja don Wydaje Ci się, że musisz zmienić głośność, której potrzebujesz, aby użyć maksymalnej głośności zamiast zmniejszonej głośności podczas grania. – zeetoobiker

+0

Tak, jest jeszcze lepiej ... Dzięki ... – MarcoS

4

Możesz zmienić ustawienia przed odtwarzaniem dźwięku.

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

Czy AudioManager.getStreamMaxVolume() Niezależne od ustawienia każdego użytkownika? Czy to maksymalna fizyczna objętość urządzenia? – MarcoS

+0

To faktycznie zmienia ustawienie użytkownika, więc tak. – 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

po zatrzymaniu po wydaniu? –

-1

To zły kod.

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

Twój kod powinien znajdować się w komentarzach. –

1

Oba kody pracował dla mnie, ale ja wolę jedną z 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(); 
}); 
Powiązane problemy