在android应用程序的音量控制

我想知道如何从音量键控制我的应用程序的音量(与我的看法相反,我读过它们只能控制铃声音量)。 我应该覆盖onKey Down / Up吗?

或者有其他的方法来完成这个? 我在问,因为如果我覆盖上面提到的一个活动的函数,那么只有当与这个活动相关的视图有焦点的时候,这个函数才会收到这个事件,而我正在寻找一个“Globaly”的东西现在正在运行什么活动)

很久以前还有一个问题 ,就是同样的问题。 本质上,答案是:不要覆盖onKeyDown和onKeyUpbutton。 简单地使用这一行setVolumeControlStream(AudioManager.STREAM_MUSIC); 在你的onCreate()方法中。 这告诉操作系统,当您的应用程序可见时,音量button应该会影响“媒体”音量,这就是您的应用程序使用的音量。

至于控制媒体音量,无论哪个应用程序是可见的,我不知道可以做什么 – 或者如果可能的话,这是否是一件好事。

在您的活动中,您可以使用以下任一项:

 this.setVolumeControlStream(AudioManager.STREAM_MUSIC); this.setVolumeControlStream(AudioManager.STREAM_RING); this.setVolumeControlStream(AudioManager.STREAM_ALARM); this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION); this.setVolumeControlStream(AudioManager.STREAM_SYSTEM); this.setVolumeControlStream(AudioManager.STREAM_VOICECALL); 

希望这个工作的android代码将帮助你开发你自己的音量控制应用程序:

 public class audioSetting extends Activity { Button b; TextView t; SeekBar s; EditText e; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button)findViewById(R.id.button1); s = (SeekBar)findViewById(R.id.seekBar1); e = (EditText)findViewById(R.id.editText1); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub finish(); } }); final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); int a = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); int c = audioManager.getStreamVolume(AudioManager.STREAM_RING); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub audioManager.setStreamVolume(AudioManager.STREAM_RING, (int)(Integer.parseInt(e.getText().toString().trim())), 0); s.setProgress((int)(Integer.parseInt(e.getText().toString().trim()))); } }); s.setMax(a); s.setProgress(c); e.setText(""+c); s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar arg0) { } @Override public void onStartTrackingTouch(SeekBar arg0) { } @Override public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { audioManager.setStreamVolume(AudioManager.STREAM_RING, arg1, 0); e.setText(""+s.getProgress()); } }); } } 

这是一个古老的问题,但有一个优秀的库处理音量控制在Android(甚至比音量button,这是限制在5个音量级别的增量)。

http://code.google.com/p/media-volume-control

看看这个软件包 ,它提供了连续的音量级别以及其他不错的function(比如当audio被中断时,音量监视器被通知/如何/何时音量级别被改变 – 无论何时显示音量SeekBar等)。