创建滑块以更改Android音量?

10

有人能给我一个通过滑块来改变音量的示例代码吗? 我搜索了很多教程,大部分要求我创建一个全新的类。是否有更简单的方法呢?

谢谢!

3个回答

22

将以下代码添加至您的OnCreate中,您需要将您的SeekBar放入布局XML文件中:

    audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    SeekBar volControl = (SeekBar)findViewById(R.id.volbar);
    volControl.setMax(maxVolume);
    volControl.setProgress(curVolume);
    volControl.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_MUSIC, arg1, 0);
        }
    });

如果我的音频是从其他地方(例如服务中)开始的,我该怎么做?当我尝试移动进度条时,在onProgressChanged中出现了NullPointerException。 - ShadowGod
你可能应该将这个问题单独提出来。你可能需要调用你的服务来调整音量。 - Alan Moore
我明白了。谢谢艾伦的快速回复! - ShadowGod
如果您的音频是从服务中开始播放,那么它实际上可以正常工作,这是我的愚蠢错误。 - ShadowGod
太棒了,像魔法一样运作。 - Jai Kumar

1

0
六年后,这个稍微改动过的版本在我的Android Studio 3.1中运行良好。IDE提示我必须将AudioManager声明为final:
        /* volume slider*/
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
SeekBar volControl = (SeekBar)findViewById(R.id.volControl);
volControl.setMax(maxVolume);
volControl.setProgress(curVolume);
volControl.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_MUSIC, arg1, 0);
    }
});

//end Volume slider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接