Android应用程序中的音量控制

时间:2010-03-29 15:44:37

标签: android

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

或者还有其他方法可以实现这一目标吗?我问,因为如果我覆盖一个活动的上面提到的函数,那么只有当与此活动相关联的视图具有焦点时,函数才会收到事件,并且我正在寻找“Globaly”的东西(不工作)无论现在正在运行什么活动)

4 个答案:

答案 0 :(得分:73)

还有另一个question from a long time ago提出同样的问题。基本上答案是:不要覆盖onKeyDown和onKeyUp按钮。在onCreate()方法中简单地使用这一行setVolumeControlStream(AudioManager.STREAM_MUSIC);会好得多。这告诉操作系统,当您的应用程序可见时,音量按钮应该影响“媒体”音量,这就是它为您的应用程序使用的音量。

至于控制媒体音量,无论哪个应用程序可见,我都不确定是否可以 - 或者是否可以,这是否是一件好事。

答案 1 :(得分:11)

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

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

答案 2 :(得分:1)

希望这个有效的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());
                }
            });
        }
}

答案 3 :(得分:0)

这是一个老问题,但是有一个很棒的库来处理android中的音量控制(甚至比音量按钮更好,音量按钮限制为音量级​​别的5个增量)。

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

看看this package,它提供连续的音量级别以及其他不错的功能(例如音频中断时,如果/当音量级别通过任何方式改变时,将通知音量监视器 - 在显示卷SeekBar等时要小心。)。