Android MediaPlayer播放音乐并实现进度条
提前工作,往sd卡里放音乐文件
1、布局文件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>
2、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, , );
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();
} 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播放音乐并实现进度条的更多相关文章
- Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用
Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...
- Android MediaPlayer 播放音频
本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式.关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPla ...
- Android(java)学习笔记180:Android MediaPlayer 播放prepareAsync called in state 8解决办法
使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误. 以下方法可以避免这个异常出现. 第一种方法: private ...
- Android(java)学习笔记123:Android MediaPlayer 播放prepareAsync called in state 8解决办法
1. 使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误. 以下方法可以避免这个异常出现. 第1种方法: priva ...
- android 自定义控件——(四)圆形进度条
----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...
- Android开发-各种各样好看漂亮的进度条,指示器,加载提示汇总
导读:之前项目中用到一些进度条,找了不少,打算写个demo自己总结一下,留着以后用, 有些是自己写的,有些是github上找的别人的库,如果大家觉得好看可以用,直接下载复制代码到项目里就可以用,ok ...
- android 网络异步加载数据进度条
ProgressDialog progressDialog = null; public static final int MESSAGETYPE = 0; private void execute( ...
- Android实例-MediaPlayer播放音乐和视频(XE8+小米2)
结果: 1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1; 2.播放声音文件正常, ...
- 【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set
一错误描述 二错误解决 解决方法一 解决方法二 一.错误描述 刚用MediaPlayer播放Music的时候,看到Log打印台总是会打印一条错误日志,MediaPlayer: Should have ...
随机推荐
- linux系统管理(1)之 内核编译选项查看
三个方法 proc文件系统 ubunut debain 红帽等 proc文件系统 /proc/config.gz This file shows you the compile-time config ...
- Oracle WebLogic Server 12c 新特性
美国时间2011年 12月9日,Oracle公司正式发布WebLogic 12c版本,c是cloud的缩写.截止当前(2013年8月)最新版本为Oracle WebLogic Server 12c ( ...
- Python的html解析器
转自https://blog.csdn.net/jqh2002_blog/article/details/24842217 其实比较不同的解析器对html的处理能力是有点麻烦的,因为它们处理的步骤并不 ...
- ngx_echo_module
https://github.com/openresty/echo-nginx-module echo $echo_request_body
- 【云计算】impala建表,文件关联,查询
[cloudil@hadoop164 caixianfeng]$ hdfs dfs -mkdir -p /csv-pig/tab1 /csv-pig/tab1 tab1.csv: 1,true,123 ...
- (转)nmon和nmon analyser的下载和使用
原文:https://blog.csdn.net/a7442358/article/details/50186283 nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能 ...
- mysql优化和sql语句优化总结
mysql性能优化 1. EXPLAIN 你的 SELECT 查询.使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的.这可以帮你分析你的查询语句或是表结构的性能瓶颈. 2. ...
- goLang冒泡
// test project main.gopackage main import ( "fmt") func main() { var a = [10]int{1, ...
- java获取当前秒数输出
Date的getSeconds()已经过时了.不建议用.所以用了下面方法 Calendar c = Calendar.getInstance(); while(true) { c ...
- CentOS7下Django安装
Django安装介绍 安装环境: CentOS7 安装Django比较简单,但需要安装其依赖的东西,还是需要一定时间的.我使用的环境是CentOS Linux release 7.3.1611. 内核 ...