Android之MediaPlayer播放音乐并实现进度条实例
首先,说明我们是从sd卡里读文件,来播放文件!!
1、效果图:
提前工作,往sd卡里放音乐文件,如图:
2、布局文件main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="歌曲名:"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="blueflawer.mp3"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="播放"
- android:id="@+id/play_pause"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="重置"
- android:id="@+id/reset"/>
- <SeekBar
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/seekbar"/>
- </LinearLayout>
3、activity类
- package cn.csdn.activity;
- import java.io.File;
- import java.io.IOException;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.app.Activity;
- import android.media.MediaPlayer;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.SeekBar;
- import android.widget.SeekBar.OnSeekBarChangeListener;
- public class MyPlayerActivity extends Activity {
- private Button play_pause, reset;
- private SeekBar seekbar;
- private boolean ifplay = false;
- private MediaPlayer player = null;
- private String musicName = "blueflawer.mp3";
- private boolean iffirst = false;
- private Timer mTimer;
- private TimerTask mTimerTask;
- private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- player = new MediaPlayer();
- findViews();// 各组件
- }
- private void findViews() {
- play_pause = (Button) findViewById(R.id.play_pause);
- reset = (Button) findViewById(R.id.reset);
- play_pause.setOnClickListener(new MyClick());
- reset.setOnClickListener(new MyClick());
- seekbar = (SeekBar) findViewById(R.id.seekbar);
- seekbar.setOnSeekBarChangeListener(new MySeekbar());
- }
- class MyClick implements OnClickListener {
- public void onClick(View v) {
- File file = new File(Environment.getExternalStorageDirectory(),
- musicName);
- // 判断有没有要播放的文件
- if (file.exists()) {
- switch (v.getId()) {
- case R.id.play_pause:
- if (player != null && !ifplay) {
- play_pause.setText("暂停");
- if (!iffirst) {
- player.reset();
- try {
- player.setDataSource(file.getAbsolutePath());
- player.prepare();// 准备
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- seekbar.setMax(player.getDuration());//设置进度条
- //----------定时器记录播放进度---------//
- mTimer = new Timer();
- mTimerTask = new TimerTask() {
- @Override
- public void run() {
- if(isChanging==true) {
- return;
- }
- seekbar.setProgress(player.getCurrentPosition());
- }
- };
- mTimer.schedule(mTimerTask, 0, 10);
- iffirst=true;
- }
- player.start();// 开始
- ifplay = true;
- } else if (ifplay) {
- play_pause.setText("继续");
- player.pause();
- ifplay = false;
- }
- break;
- case R.id.reset:
- if (ifplay) {
- player.seekTo(0);
- } else {
- player.reset();
- try {
- player.setDataSource(file.getAbsolutePath());
- player.prepare();// 准备
- player.start();// 开始
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- break;
- }
- }
- }
- }
- //进度条处理
- class MySeekbar implements OnSeekBarChangeListener {
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser) {
- }
- public void onStartTrackingTouch(SeekBar seekBar) {
- isChanging=true;
- }
- public void onStopTrackingTouch(SeekBar seekBar) {
- player.seekTo(seekbar.getProgress());
- isChanging=false;
- }
- }
- //来电处理
- protected void onDestroy() {
- if(player != null){
- if(player.isPlaying()){
- player.stop();
- }
- player.release();
- }
- super.onDestroy();
- }
- protected void onPause() {
- if(player != null){
- if(player.isPlaying()){
- player.pause();
- }
- }
- super.onPause();
- }
- protected void onResume() {
- if(player != null){
- if(!player.isPlaying()){
- player.start();
- }
- }
- super.onResume();
- }
- }
Android之MediaPlayer播放音乐并实现进度条实例相关推荐
- 基于Qt的音乐播放器(一)添加音频文件,播放音乐,更新进度条
2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.实现音频文件对话框(QFileDialog类) 2.实现音乐播放(QMediaPlayer ...
- Android中MediaPlayer播放音乐时自动中断的解决办法
今天尝试在一个有SurfaceView持续绘图的程序里加入背景音乐,遇到一个故障: 音乐播10几秒就中止了,此后再无声响. 尝试更换为其他mp3文件,无果. 尝试将播放操作由子线程转到主线程,依然不行 ...
- Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)
1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...
- 基于Android的MediaPlayer的音乐播放器的封装
基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...
- android第三方开源音频播放器,Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用...
Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...
- Android实现在线播放音乐
Android实现在线播放音乐 2014年3月10日 hello,小伙伴们,3月份珊珊来迟的第一篇博客,最近小巫在找工作,加上又生病了,就没有太多精力去写博客了.今天拖着病发表一篇之前已经实现的在线播 ...
- android后台自播放音乐,Android实现后台播放音乐(Service方式)
Android实现后台播放音乐(Service方式) 实现: 在res文件夹下添加raw文件夹,添加mp3/4格式的音乐文件 注意命名规则只能是a-z,0-9,和下划线_ 不能大写字母和- Andro ...
- Android之MediaPlayer播放网络视频的实现方法
前段时间忙于工作,现在有时间来分享一下: 这篇文章主要介绍了Android的MediaPlayer播放网络视频的实现方法,是一个非常实用的功能,需要的朋友可以参考下 前面讲解了MediaPlayer播 ...
- Android使用MediaPlayer播放音频
Android使用MediaPlayer播放音频 一.目标 二.最终实现 三.接下来 四.Finally 开发<Android高仿iOS Messages声音播放波形效果>完成后,Tape ...
最新文章
- html表格上下移动,Vue实现table上下移动功能示例
- 在linux中只将“桌面”修改成“Desktop”而系统仍然使用中文
- 求三角形最大面积(DP)
- Python 十七章 Web开发
- centos7配网卡_centos7配置网卡
- Pixhawk之姿态控制篇
- mysql pdo prepare_PDO::prepare
- html里content标签作用,HTML content 标签
- Ambari HDP 完整安装手册
- 第一次 Zul'grub
- 一个很可爱的二次元风格的个人技术博客
- 基于Matlab解决线性规划问题
- php 表格内边距,CSS 内边距
- Word 文档乱码-请选择使文档可读的编码 重启电脑-不是解决方法的解决方法(可能已经晚了)
- ELK+grok+华为防火墙USG6500会话日志
- MATLAB数字图像处理系统——边缘检测
- 机械臂matlab运动学仿真,matlab建立机械臂运动学仿真
- nose-report
- win10黑色护眼风格一波带走
- 写给《中国品牌日》:梦想不远 未来可期 为每一个农业品牌人鼓掌
热门文章
- 【数字信号处理】离散时间信号 ( 模拟信号、离散时间信号、数字信号 | 采样导致时间离散 | 量化导致幅度离散 )
- 【运筹学】表上作业法 ( 求初始基可行解 | 最小元素法 )
- 【Android 高性能音频】AAudio 音频流 读写操作 ( 音频流读写数据 | 阻塞时间设定 | 注意事项 | AAudioStream_read | AAudioStream_write )
- 使用expvar进行监控
- linux下部署svn服务器
- AsyncTask应用解析
- 2017 ACM/ICPC(西安)赛后总结
- 自己写getElementsByClass()方法
- mysql,int(5)、int(10)啥区别联系
- 游戏玩家行为基本模式的初探小汇