android应用中的音量控制

android应用中的音量控制,android,Android,我想知道如何通过音量键控制应用程序的音量(与我的想法相反,我读到它们只控制铃声音量)。我是否应该向下/向上覆盖ON键 还是有其他方法来实现这一点?我这样问是因为,若我覆盖上面提到的某个活动的函数,那个么只有当和该活动相关联的视图具有焦点时,这些函数才会接收该事件,并且我正在寻找“全局性”的东西(无论现在运行的是什么活动都可以工作)有另一个函数提出了同样的问题。基本上,答案是:不要覆盖onKeyDown和onkeydup按钮。最好只使用这一行setVolumeControlStream(Audio

我想知道如何通过音量键控制应用程序的音量(与我的想法相反,我读到它们只控制铃声音量)。我是否应该向下/向上覆盖ON键

还是有其他方法来实现这一点?我这样问是因为,若我覆盖上面提到的某个活动的函数,那个么只有当和该活动相关联的视图具有焦点时,这些函数才会接收该事件,并且我正在寻找“全局性”的东西(无论现在运行的是什么活动都可以工作)

有另一个函数提出了同样的问题。基本上,答案是:不要覆盖onKeyDown和onkeydup按钮。最好只使用这一行
setVolumeControlStream(AudioManager.STREAM\u MUSIC)。这告诉操作系统,当应用程序可见时,音量按钮会影响“媒体”音量,这就是应用程序使用的音量


至于控制媒体音量,无论什么应用程序可见,我都不确定这是否可行——或者如果可以,这是否是一件好事。

这是一个老问题,但安卓系统中有一个处理音量控制的极好库(甚至比音量按钮更好,音量限制为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音响系统的注意力吗。。。。我只想知道这样一个媒体,而不需要与声音进行任何其他交互