http://blog.csdn.net/hellogv/article/details/6406732

在此文章的代码下做部分改动,已适应自己的需要,主要就是改为播放暂停同一个按钮,便于切换。

更主要的是复习定时器,另外在线音频播放不成功以后再研究吧。


播放器控制类

package com.example.mediaplayer;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.SeekBar;public class Player implements OnBufferingUpdateListener, OnCompletionListener,MediaPlayer.OnPreparedListener ,OnErrorListener{public MediaPlayer mediaPlayer;private SeekBar skbProgress;private Timer mTimer = new Timer();public Player() {try {mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setOnBufferingUpdateListener(this);mediaPlayer.setOnPreparedListener(this);mediaPlayer.setOnCompletionListener(this);} catch (Exception e) {Log.e("mediaPlayer", "error", e);}mTimer.schedule(mTimerTask, 0, 1000);}public void setProgressBar(SeekBar skbProgress){this.skbProgress = skbProgress;}/*** 通过定时器和Handler来更新进度条*/TimerTask mTimerTask = new TimerTask() {@Overridepublic void run() {if (mediaPlayer == null)return;if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) {handleProgress.sendEmptyMessage(0);}}};//处理消息Handler handleProgress = new Handler() {public void handleMessage(Message msg) {int position = mediaPlayer.getCurrentPosition();int duration = mediaPlayer.getDuration();if (duration > 0) {int pos = skbProgress.getMax() * position / duration;skbProgress.setProgress(pos);}};};//初始播放public void playUrl(String videoUrl) {try {mediaPlayer.reset();mediaPlayer.setDataSource(videoUrl);mediaPlayer.prepare();// prepare之后自动播放//            File file = new File(videoUrl);
//            FileInputStream fis = new FileInputStream(file);
//            mediaPlayer.setDataSource(fis.getFD());
//            mediaPlayer.prepare(); } catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//暂停public void pause() {mediaPlayer.pause();}//播放public void play() {mediaPlayer.start();}//停止public void stop() {if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;}}//判断是否正在播放public boolean isplaying(){boolean playing = mediaPlayer.isPlaying();return playing;}/*** 通过onPrepared播放*/public void onPrepared(MediaPlayer arg0) {arg0.start();Log.e("mediaPlayer", "onPrepared");}public void onCompletion(MediaPlayer arg0) {Log.e("mediaPlayer", "onCompletion");}public void onBufferingUpdate(MediaPlayer arg0, int bufferingProgress) {skbProgress.setSecondaryProgress(bufferingProgress);int currentProgress = skbProgress.getMax()* mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration();Log.e(currentProgress + "% play", bufferingProgress + "% buffer");}public boolean onError(MediaPlayer mp, int what, int extra) {return false;}}

界面类

package com.example.mediaplayer;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;import android.app.Activity;
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;public class TestMedia extends Activity {private Button btnPause, btnPlayUrl, btnStop;private SeekBar skbProgress;private Player player;private int first;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);this.setTitle("在线音乐播放---hellogv编写");btnPlayUrl = (Button) this.findViewById(R.id.btnPlayUrl);btnPlayUrl.setOnClickListener(new ClickEvent());btnPause = (Button) this.findViewById(R.id.btnPause);btnPause.setOnClickListener(new ClickEvent());btnStop = (Button) this.findViewById(R.id.btnStop);btnStop.setOnClickListener(new ClickEvent());skbProgress = (SeekBar) this.findViewById(R.id.skbProgress);skbProgress.setOnSeekBarChangeListener(new SeekBarChangeEvent());player = new Player();}class ClickEvent implements OnClickListener {public void onClick(View arg0) {player.setProgressBar(skbProgress);if (arg0 == btnPause) {// 播放暂停按钮if (player.isplaying())// 如果正在播放则暂停{player.pause();btnPause.setText("播放");} else// 如果暂停则播放{btnPause.setText("暂停");if (first == 0)// 初始播放{String luyin_Path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/" + "she.mp3";player.playUrl(luyin_Path);} else// 继续播放{player.play();}}first++;} else if (arg0 == btnPlayUrl) {// // 在百度MP3里随便搜索到的,大家可以试试别的链接// String url = "http://219.138.125.22/myweb/mp3/CMP3/JH19.MP3";// player.playUrl(url);String music_path = "http://stream19.qqmusic.qq.com/30974808.mp3";player.playUrl(music_path);} else if (arg0 == btnStop) {player.stop();}}}class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {int progress;public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// 原本是(progress/seekBar.getMax())*player.mediaPlayer.getDuration()this.progress = progress * player.mediaPlayer.getDuration()/ seekBar.getMax();}public void onStartTrackingTouch(SeekBar seekBar) {}public void onStopTrackingTouch(SeekBar seekBar) {// seekTo()的参数是相对与影片时间的数字,而不是与seekBar.getMax()相对的数字player.mediaPlayer.seekTo(progress);}}}

代码下载

http://download.csdn.net/detail/superjunjin/7070067

定时器Timer和播放器MediaPlayer相关推荐

  1. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  2. android音乐播放器实现,Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  3. Android-音频播放器—MediaPlayer

    音频播放器-MediaPlayer 1.日常生活中听到的数码声音即音频,主要格式有(MP3,3GPP,Ogg和,WAWE)等,通常看到的视频主要有(3GP 和mpeg-4) 2.再Android中提供 ...

  4. Android--MP3播放器MediaPlayer

    MediaPlayer 上面提到过,Android下对于音频.视频的支持均需要使用到MediaPlayer,它主要用来控制Android下播放文件或流的类.MediaPlayer处于Android多媒 ...

  5. Android音视频开发(2)常用的系统播放器MediaPlayer

    1.状态图及生命周期 MediaPlayer是一个多媒体播放类,通过它控制音视频流或本地音视频资源的播放过程. 它分为很多状态,如下图所示: 图中的单箭头弧代表同步函数调用,双箭头弧代表异步函数调用. ...

  6. android music player实现一个可随机/顺序播放的可加载专辑图片的音频播放器(MediaPlayer)

    音乐播放器 1. 媒体交互框架 1. 服务端 2. 客户端 3. 两端消息交互 2. 播放模式 1. 单曲循环和整体循环 2. 随机播放和顺序播放 3. 几个问题: 1. 合并播放模式 2. 播放指定 ...

  7. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

    大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...

  8. MediaPlayer( 媒体播放器),TelephonyManager(电话管理类),MediaRecorder(媒体录音机)

    媒体播放器 MediaPlayer 媒体播放器类可用于控制回放的音频/视频文件和流. 方法: setDataSource(String path);// 设置数据源(文件路径或http / rtsp ...

  9. android播放器:MediaPlayer ExoPlayer ijkplayer

    视频播放主要涉及解码流程,主要分为硬解码和软解码.在Android设备硬件支持的情况下优先使用Android设备的硬件解码,减少CPU的占用,更加省电. 软件解码:通过软件让CPU来对视频进行解码处理 ...

最新文章

  1. FPGA之道(65)代码中的约束信息(二)乘法器的相关约束
  2. Spring为什么建议使用构造器来注入?
  3. Winhex添加文件头的方法
  4. EJB3与Spring的集成
  5. ES6函数第三篇:函数篇(新增API与箭头函数)
  6. vue 按钮多次点击重复提交数据
  7. flex布局应用与踩坑
  8. es6 Generator函数的应用
  9. Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除
  10. instanceof 和 构造函数
  11. 无线传感器网络中低功耗MAC协议—T-MAC
  12. 微信到 Obsidian 2.0
  13. 根号二怎么不用计算机算,[转载]开根号,不用计算器你会么?
  14. 初谈证券交易系统开发核心
  15. mscorsvw.exe占内存解决方案
  16. C语言_关于文件内容删除的两个方法总结
  17. 计算机专业对应的职业群有,[计算机硬件及网络]7k专业与职业群.ppt
  18. darknet 框架 安装编译
  19. ubuntu 安装ttf-mscorefonts-installer
  20. Android 11.0 系统Settings去掉开发者模式功能

热门文章

  1. python作业(12.12)
  2. H5 FileReader对象
  3. Javascript - demo 与 捷径
  4. android初始化activity时隐藏软键盘
  5. GLPI+OCS、SmartIT、LANDesk比较
  6. ARP挂马***--嗅探欺骗的最恐怖方式
  7. 2018年7月3日笔记
  8. NAT网关自动去掉TCP syn包的时间戳
  9. 侣信即时通讯系统全新发布
  10. C#编程(二十五)----------接口