android应用中的音量控制
我想知道如何通过音量键控制应用程序的音量(与我的想法相反,我读到它们只控制铃声音量)。我是否应该向下/向上覆盖ON键 还是有其他方法来实现这一点?我这样问是因为,若我覆盖上面提到的某个活动的函数,那个么只有当和该活动相关联的视图具有焦点时,这些函数才会接收该事件,并且我正在寻找“全局性”的东西(无论现在运行的是什么活动都可以工作)有另一个函数提出了同样的问题。基本上,答案是:不要覆盖onKeyDown和onkeydup按钮。最好只使用这一行android应用中的音量控制,android,Android,我想知道如何通过音量键控制应用程序的音量(与我的想法相反,我读到它们只控制铃声音量)。我是否应该向下/向上覆盖ON键 还是有其他方法来实现这一点?我这样问是因为,若我覆盖上面提到的某个活动的函数,那个么只有当和该活动相关联的视图具有焦点时,这些函数才会接收该事件,并且我正在寻找“全局性”的东西(无论现在运行的是什么活动都可以工作)有另一个函数提出了同样的问题。基本上,答案是:不要覆盖onKeyDown和onkeydup按钮。最好只使用这一行setVolumeControlStream(Audio
setVolumeControlStream(AudioManager.STREAM\u MUSIC)在onCreate()方法中使用code>。这告诉操作系统,当应用程序可见时,音量按钮会影响“媒体”音量,这就是应用程序使用的音量
至于控制媒体音量,无论什么应用程序可见,我都不确定这是否可行——或者如果可以,这是否是一件好事。这是一个老问题,但安卓系统中有一个处理音量控制的极好库(甚至比音量按钮更好,音量限制为5个增量)
看一看,它提供了连续的音量水平以及其他出色的功能(例如,当音频中断时,如果音量水平以任何方式发生变化,音量监视器将收到通知,例如,在显示音量搜索栏时,可以手动操作等)。在您的活动中,您可以使用以下功能之一:
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());
}
});
}
}
问题是,我只想在我的应用程序的活动正在运行时运行,我不想让它工作,如果其他应用程序的活动位于活动堆栈的顶部,谢谢!我想它可以为我工作!这一行应该添加在什么活动中?有什么建议吗?请将它放在任何将发出声音的活动的onCreate()方法中。顺便说一下,您应该仔细检查您提出的问题,如果答案对您有帮助,请将答案标记为“已接受”。这对帮助过你的人来说是件好事,因为这给了他们“声誉”——我们的用户名下面显示的数字。阅读FAQ了解更多详细信息。顺便问一下,如果我在onKeyDown中捕捉到按下音量键的事件,并返回super.onKeyDown,我会分散android音响系统的注意力吗。。。。我只想知道这样一个媒体,而不需要与声音进行任何其他交互