Android之MediaPlayer播放音乐并实现进度条实例
来源:互联网 发布:图片怎么上传淘宝店铺 编辑:程序博客网 时间:2024/05/19 15:43
首先,说明我们是从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>
- 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();
- }
- }
0 0
- Android之MediaPlayer播放音乐并实现进度条实例
- Android之MediaPlayer播放音乐并实现进度条实例
- Android MediaPlayer实现音乐播放
- MediaPlayer 音乐播放器进度条
- Android初级,MediaPlayer播放音乐,进度条滑动及唱片转动功能实现
- Android之MediaPlayer(多媒体之音乐播放)
- android如何长时间音乐播放实现MediaPlayer
- android如何长时间音乐播放实现MediaPlayer
- Android音乐播放器 -- MediaPlayer Service实现
- android MediaPlayer实现简单的音乐播放
- Android实现简单音乐播放器(MediaPlayer)
- Android实现简单音乐播放器(MediaPlayer)
- mediaplayer实现音乐播放
- Android之Mediaplayer音乐播放器
- android MediaPlayer 音乐播放
- android-MediaPlayer音乐播放
- android mediaPlayer 播放音乐
- Android音乐播放-MediaPlayer
- PDF格式文件的浏览与编辑
- JVM内存分析
- 【教程】Win32 WNDCLASS窗口类中的额外空间cbClsExtra和cbWndExtra的用法
- 一个超炫的listview
- ubuntu下查找含有某关键字内容的文件(cp:http://www.2cto.com/os/201401/274076.html)
- Android之MediaPlayer播放音乐并实现进度条实例
- iOS开发:第一次打开App 时展示版本新特性
- Java接口回调机制详解
- iOS 开发:用 Instruments 来检验你的app
- Java中的堆和栈的区别
- 计算器-1
- 清除浮动
- 获取未来一周的日期和星期数
- Java数组操作的10大方法