最近在项目中遇到了,一个控制播放音量的大小,首先就想到就是调节系统媒体的音量,
这样就能实现功能了,但是由于需求的更改,同时播放两种音乐,只控制其中一个音量的变化.
通过查看资料发现MediaPlayer类中有个setVolume(curVolume, curVolume)方法能够控制所播放
音乐的声音,使用这个方法时候需要注意的是,在初始化MediaPlayer后要调用mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
一定要用setDataSource方法才能用setVolume设置
start之前还需要执行prepare函数,prepare完成后才能执行start播放
代码如下:
private void mPlayer() {
//这里由于播放资源文件中的音乐文件所以需要转化
AssetFileDescriptor afd = context.getResources().openRawResourceFd(rid);
curVolume = (float) value / 10;
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.setVolume(curVolume, curVolume);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(this);
}
调节系统媒体音量代码如下:
private void mPlayer() {
audioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// 获取最大音乐音量
maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
//path播放音乐的路径
mediaPlayer.setDataSource(path);
// 准备声音
mediaPlayer.prepare();
// 播放
mediaPlayer.start();
//调整音量 curVolume为音量值
audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, curVolume,
AudioManager.FLAG_PLAY_SOUND);
}
adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:
1.STREAM_ALARM 警报
2.STREAM_MUSIC 音乐回放即媒体音量
3.STREAM_NOTIFICATION 窗口顶部状态栏Notification,
4.STREAM_RING 铃声
5.STREAM_SYSTEM 系统
6.STREAM_VOICE_CALL 通话
第二个direction,是调整的方向,增加或减少
第三个flags是一些附加参数,只介绍两个常用的
1.FLAG_PLAY_SOUND 调整音量时播放声音
2.FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个
添加权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />