Android 超简单音乐播放器(七)拖动歌曲进度条~音量控制~
2017-11-13 22:16
621 查看
音量控制
通过接收广播进行改变设置全局变量
private AudioManager mAudioManager; private ContentObserver mVoiceObserver; private MyVolumeReceiver mVolumeReceiver;
给滑动条添加改变监听
sbVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
AudioManager audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
//系统音量和媒体音量同时更新
audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, i, 0);
audioManager.setStreamVolume(3, i, 0);// 3 代表 AudioManager.STREAM_MUSIC
}
@Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
写一个ContentObserver 来监听音量的变化。
设置音量条的进度。mVoiceObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); AudioManager audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); sbVolume.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM)); } };
初始化一些数据。
private void initVolume() { mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);//获取媒体系统服务 sbVolume.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));//设置最大音量 sbVolume.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));//当前的媒体音量 myRegisterReceiver();//注册同步更新的广播 }
注册当音量发生变化时接收的广播
private void myRegisterReceiver(){ mVolumeReceiver = new MyVolumeReceiver() ; IntentFilter filter = new IntentFilter() ; filter.addAction("android.media.VOLUME_CHANGED_ACTION") ; getContext().registerReceiver(mVolumeReceiver, filter) ; }
处理音量变化时的界面显示
private class MyVolumeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //如果音量发生变化则更改seekbar的位置 if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){ AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int currVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) ;// 当前的媒体音量 sbVolume.setProgress(currVolume) ; } } }
记得要取消广播接收器。
@Override public void onDestroyView() { super.onDestroyView(); getContext().unregisterReceiver(mVolumeReceiver); ButterKnife.unbind(this); }
拖动歌曲进度条
写一个Timer。
每一秒钟改变一次。private boolean isSeekBarChanging;//互斥变量,防止进度条与定时器冲突。 private Timer timer ; private TimerTask timerTask;
sbProgress.setMax(MusicUtil.getInstance().getDuration()); timerTask = new TimerTask() { @Override public void run() { if(isSeekBarChanging==true) { return; } sbProgress.setProgress(MusicUtil.getInstance().getCurrentPosition()); //更改UI界面需要切换到主线程中去 所以要在这里重写一个这个方法 runOnUiThread(new Runnable() { @Override public void run() { tvCurrentTime.setText(formatTime("mm:ss",MusicUtil.getInstance().getCurrentPosition())); } }); } }; timer = new Timer(); timer.schedule(timerTask, 0, 1000);
为进度条设置监听
sbProgress.setOnSeekBarChangeListener( new MySeekbar());//添加一个改变监听 class MySeekbar implements SeekBar.OnSeekBarChangeListener { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } public void onStartTrackingTouch(SeekBar seekBar) { isSeekBarChanging=true;//防止滑动进度条时候起冲突 } public void onStopTrackingTouch(SeekBar seekBar) { MusicUtil.getInstance().setSeekTo(seekBar.getProgress()); //把拖动后进度条的进度传入然后更改歌曲播放时间 isSeekBarChanging=false; } }
将long转换为分秒的一个方法。
public static String formatTime(String pattern, long milli) { int m = (int) (milli / DateUtils.MINUTE_IN_MILLIS); int s = (int) ((milli / DateUtils.SECOND_IN_MILLIS) % 60); String mm = String.format(Locale.getDefault(), "%02d", m); String ss = String.format(Locale.getDefault(), "%02d", s); return pattern.replace("mm", mm).replace("ss", ss); }
相关文章推荐
- Android 播放器中容易用到的进度条[音量控制,播放进度]
- Android应用--简、美音乐播放器增加音量控制
- Android 超简单音乐播放器(三)根据歌曲名或者歌手搜索本地音乐(EditText监听)
- Android 音乐播放器的开发教程(八)歌曲的切换和进度条的拖动 ----- 小达
- Android 超简单音乐播放器(十二)换个歌词和删除歌曲
- 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
- Android 超简单音乐播放器(五) 发送歌曲信息到详情界面
- android-----音乐播放器的音量控制功能(开发)
- Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条 绑定方式通信
- Android 播放器中容易用到的进度条[音量控制,播放进度]
- Android 超简单音乐播放器(六)播放暂停音乐,更换播放模式,上下歌曲切换(service)
- Android应用--简、美音乐播放器增加音量控制
- GL音乐播放器--代码实现<四>--进度控制和可隐藏的音量控制
- Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)
- 音乐播放器项目技术之一音乐播放进度及音量的控制
- 简单的Android音乐播放,解决incall类型不能通过音量按键控制声音大小的问题
- [置顶] 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
- 音乐播放器的歌曲进度调节和音量大小调节实现
- Android 超简单音乐播放器(九)搜索网络歌曲,获得热门榜单(GridView)(易源api的使用)(JSON的解析)(刷新)
- Android 播放器中容易用到的进度条(音量控制,播放进度)