本文实例为大家分享了android实现音乐播放器进度条效果的具体代码,供大家参考,具体内容如下
效果图
依赖3个对象
MediaPlayer:实现音乐播放,暂停,缓冲。
SeekBar:滑动的进度条。
java.util.Timer:定时器,时时更新进度条。
main.xml样式文件
<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>
Activity实现代码
/** * @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()); } } }
补充:
1.如果mp3在sd中,如播放失败,是否申请sd访问权限或mp3文件是否存在。
2.MediaPlayer对有个别的音频好像不太支持,如果路径正确,权限具备还无法播放,就考虑下音频问题。
3.本案例用到的权限。
<!-- 申请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"/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍C#自定义音乐播放器进度条,包括了C#自定义音乐播放器进度条的使用技巧和注意事项,需要的朋友参考一下 有些时候我们做的程序需要进度条,而vs提供的控件不是我们想要的。先看效果图: 进度条闪烁动画,当然背景可设为Transparent 之前想手绘进度条线条的,结果控件运行时会闪烁,所以直接用了panel控件 源码: 用到的素材: 直接右键另存为图片,之所以用黑色背景是因为图片是白色的看
本文向大家介绍android实现简单音乐播放器,包括了android实现简单音乐播放器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下 话不多说先上效果 前言 写这个音乐播放器实在是迫不得已。因为我们Andoird课程要求写一个音乐播放器。所以就有了此项目。这个项目比较简单,实现了最基本的音乐播放功能,然后界面是仿照着网易云
本文向大家介绍vue2.0+SVG实现音乐播放圆形进度条组件,包括了vue2.0+SVG实现音乐播放圆形进度条组件的使用技巧和注意事项,需要的朋友参考一下 vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果 需求分析: 类似于大多数音乐播放器中等mini播放器控制按钮,显示播放进度,实时更新进度。 progress-circle.vue源码: 本组件没有使用本地资源
本文向大家介绍Android实现简单音乐播放器(MediaPlayer),包括了Android实现简单音乐播放器(MediaPlayer)的使用技巧和注意事项,需要的朋友参考一下 Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要
本文向大家介绍Android仿音乐播放器带进度的播放暂停按钮,包括了Android仿音乐播放器带进度的播放暂停按钮的使用技巧和注意事项,需要的朋友参考一下 因为项目需要,要做一个下载暂停开始的按钮,要求按钮上显示进度。网上找了找没有合适的,不太满意,于是自己动手写了一个。 效果如下: 主要步骤: 1、最外侧的圆环。 2、圆环内侧代表进度的圆弧。 3、暂停时在中心部位画出三角形。 4、播放时在中心部
本文向大家介绍Android简易音乐播放器实现代码,包括了Android简易音乐播放器实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android音乐播放器的具体代码,供大家参考,具体内容如下 1.播放项目内的音乐 2.播放内存卡中的音乐 3.添加读取内存的权限 更多关于播放器的内容请点击《java播放器功能》进行学习。 以上就是本文的全部内容,希望对大家的学习有所帮助,也