android实现音乐播放器(进度条)
|--效果图
|--依赖3个对象
MediaPlayer:实现音乐播放,暂停,缓冲。
SeekBar:滑动的进度条。
java.util.Timer:定时器,时时更新进度条。
|--main.xml样式文件
- <span style="font-size:14px;"> <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello" />
- <EditText
- android:id="@+id/mediaFileName"
- android:layout_width="match_parent"
- android:text="gangstabop.mp3"
- android:layout_height="wrap_content" >
- <requestFocus />
- </EditText>
- <LinearLayout
- android:id="@+id/linearButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- <Button
- android:id="@+id/playButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/stop" />
- <SeekBar
- android:id="@+id/playSeekBar"
- android:layout_width="140px"
- android:layout_height="wrap_content"
- android:layout_marginLeft="3px"
- android:layout_marginTop="5px" />
- <Button
- android:id="@+id/replayButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="3px"
- android:text="@string/replay" />
- </LinearLayout></span><span style="font-size: 24px;">
- </span>
|--Activity实现代码
- <span style="font-size:14px;">/**
- * @CreateDate 2015-2-3
- * @Author hubiao
- * @Title 音乐播放器
- */
- public class MediaActivity extends Activity {
- private MediaPlayer mediaPlayer;//媒体播放器
- private Button playButton;
- private Button replayButton ;
- private boolean isCellPlay;/*在挂断电话的时候,用于判断是否为是来电时中断*/
- private boolean isSeekBarChanging;//互斥变量,防止进度条与定时器冲突。
- private int currentPosition;//当前音乐播放的进度
- private SeekBar seekBar;
- private Timer timer;
- private static final String TAG = "MediaActivity";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //实例化媒体播放器
- mediaPlayer = new MediaPlayer();
- //监听滚动条事件
- seekBar = (SeekBar) findViewById(R.id.playSeekBar);
- seekBar.setOnSeekBarChangeListener(new MySeekBar());
- // 监听[播放或暂停]事件
- playButton= (Button) findViewById(R.id.playButton);
- playButton.setOnClickListener(new PalyListener());
- //监听[重播]事件
- replayButton= (Button) findViewById(R.id.replayButton);
- replayButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- mediaPlayer.reset();
- currentPosition = 0;
- play();
- }
- });
- //监听来电事件
- TelephonyManager phoneyMana = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- phoneyMana.listen(new myPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
- }
- /*销毁时释资源*/
- @Override
- protected void onDestroy() {
- mediaPlayer.release();
- timer.cancel();
- timer = null;
- mediaPlayer = null;
- super.onDestroy();
- }
- /*播放或暂停事件处理*/
- private class PalyListener implements OnClickListener {
- public void onClick(View v) {
- if(playButton.getText().toString().equals("播放"))
- {
- currentPosition = mediaPlayer.getCurrentPosition();//记录播放的位置
- mediaPlayer.stop();//暂停状态
- playButton.setText(R.string.stop);
- timer.purge();//移除所有任务;
- }
- else{
- mediaPlayer.reset();
- play();
- }
- }
- }
- /*播放处理*/
- private void play() {
- File media = new File("/mnt/sdcard/files/","bewithyou.mp3");//由于是练习,就把mp3名称固定了
- Log.i(TAG, media.getAbsolutePath());
- if(media.exists())
- {
- try {
- mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音频类型
- mediaPlayer.setDataSource(media.getAbsolutePath());//设置mp3数据源
- mediaPlayer.prepareAsync();//数据缓冲
- /*监听缓存 事件,在缓冲完毕后,开始播放*/
- mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
- public void onPrepared(MediaPlayer mp) {
- mp.start();
- mp.seekTo(currentPosition);
- playButton.setText(R.string.play);
- seekBar.setMax(mediaPlayer.getDuration());
- }
- });
- //监听播放时回调函数
- timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- if(!isSeekBarChanging){
- seekBar.setProgress(mediaPlayer.getCurrentPosition());
- }
- }
- },0,50);
- } catch (Exception e) {
- Toast.makeText(getApplicationContext(), R.string.playError, Toast.LENGTH_LONG).show();
- e.printStackTrace();
- System.out.println(e);
- }
- }
- else{
- Toast.makeText(getApplicationContext(), R.string.fileError, Toast.LENGTH_LONG).show();
- }
- }
- /*来电事件处理*/
- private class myPhoneStateListener extends PhoneStateListener
- {
- @Override
- public void onCallStateChanged(int state, String incomingNumber) {
- switch (state) {
- case TelephonyManager.CALL_STATE_RINGING://来电,应当停止音乐
- if(mediaPlayer.isPlaying() && playButton.getText().toString().equals("播放")){
- currentPosition = mediaPlayer.getCurrentPosition();//记录播放的位置
- mediaPlayer.stop();
- isCellPlay = true;//标记这是属于来电时暂停的标记
- playButton.setText(R.string.stop);
- timer.purge();//移除定时器任务;
- }
- break;
- case TelephonyManager.CALL_STATE_IDLE://无电话状态
- if(isCellPlay){
- isCellPlay = false;
- mediaPlayer.reset();
- play();
- }
- break;
- }
- }
- }
- /*进度条处理*/
- public class MySeekBar implements OnSeekBarChangeListener{
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser) {
- }
- /*滚动时,应当暂停后台定时器*/
- public void onStartTrackingTouch(SeekBar seekBar) {
- isSeekBarChanging = true;
- }
- /*滑动结束后,重新设置值*/
- public void onStopTrackingTouch(SeekBar seekBar) {
- isSeekBarChanging = false;
- mediaPlayer.seekTo(seekBar.getProgress());
- }
- }
- }</span>
|--补充
- <!-- 申请SD卡写入权限 -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <!--申请SD卡创建与权限 -->
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <!-- 拦截号码权限 -->
- <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
android实现音乐播放器(进度条)相关推荐
- android音乐播放器进度条误差研究
2019独角兽企业重金招聘Python工程师标准>>> 如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的 ...
- android音乐播放器进度条研究
如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的精度 频度和精度要相适应,才能保证流畅,并不是精度越高越好,也不是频度越高 ...
- MediaPlayer 音乐播放器进度条
今天学渣研究了一下使用MediaPlayer播放音乐时添加进度条,进度条现在用的是android自带的seekbar,后期会跟换UI的,在之前能够播放音乐的基础上,现在添加的主要功能有两个: 1实时显 ...
- android mp3进度条和时间,AndroidStudio音乐播放器进度条和歌曲时间的操作
1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...
- html音乐播放器进度条同步,网页音乐播放器完整版特效,自行控制,带进度条...
WWW.51JS.COM---[94OK] //---------这是区分播放器的音乐类型,你可以填加修改------// var RS = new Array("rm",&quo ...
- AndroidStudio音乐播放器进度条和歌曲时间的操作
1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...
- 【Android】音乐播放器APP的设计与实现
[Android]音乐播放器APP的设计与实现 一.界面设计 二.核心代码 一.界面设计 (1)注册登录 (2)主界面 (3)音乐播放器 可以实现开始,暂停,下一首,上一首功能:滑动进度条可以改变音乐 ...
- android仿音乐播放器,Android仿音乐播放器功能
本文实例为大家分享了Android仿音乐播放器功能的具体代码,供大家参考,具体内容如下 读取本地音乐文件 源代码: import android.media.MediaPlayer; import a ...
- Android 自定义音乐播放器实现
Android自定义音乐播放器 一:首先介绍用了哪些Android的知识点: 1 MediaPlayer工具来播放音乐 2 Handle.因为存在定时任务(歌词切换,动画,歌词进度条变换等)需要由Ha ...
最新文章
- 解密淘宝网的开源架构(转)
- Windows Mobile访问SQL Server CE 3.5(2)
- 模拟浏览器自动化测试工具Selenium之四cssSelector元素定位开发篇
- 蓝桥杯 大臣的旅费(Java dfs)
- 大数相乘(c语言/c++)
- word公式插件_添加office小插件,让办公更高效
- linux经常使用解压缩命令
- 看动画学算法之:排序-归并排序
- 《高性能python》第一章-理解高性能Python-阅读笔记
- OC中的基本容器和基本数据类型
- 下列哪个可做 Android 数据存储,Android应用开发试题
- 接活,你为啥不行,之懒
- js模块的封装(-)
- 当AI邂逅电能:与图知科技一起探索工业AI王座|白洞战报
- 极速pdf android,极速PDF阅读器 V3.0.0.2003 官方版[安卓软件]
- FogROS2 使用 ROS 2 的云和雾机器人的自适应和可扩展平台
- 安科瑞导轨表DDS/DTS/DTZ的功能特点
- 【Linux服务器管理】1、用户与权限
- html中循环生成表格数据,动态生成表格(简单实现)
- 2020年计算机专业研究生考试时间,2020计算机考研考试时间及考试内容
热门文章
- Pandas之drop_duplicates:去除重复项
- ZYNQ SDK开发调试踩坑指南
- 唐伯虎啊.......哎~~
- JS 开启 win10 触屏键盘
- 谈谈我对云原生与软件供应链安全的思考
- [转]PROE传动链条的装配教程
- 国家职业三级计算机,计算机程序设计员国家职业资格三级(高级) 试卷三.doc
- 和府捞面全新品牌“小面小酒”在福州开业,下一批新店落地天津、淄博
- LeetCode 347. 前 K 个高频元素(C++)*
- 2011年1月23日