首先先认识一下播放音乐的程序代码:在布局文件中,定义3个按钮,开始,和停止。布局文件十分简单,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android
"
下面是活动的代码,是实现播放音乐的核心,具体的代码解释在注释中:
public class FiveActivity extends Activity implements OnClickListener {
private Button play;
private Button pause;
private Button stop; //
定义3个按钮
private MediaPlayer mediaPlayer = new MediaPlayer(); //
实例化MediaPlayer对象,MediaPlayer是系统内部类
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_media);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
stop = (Button) findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this); //
注意点击事件的不同形式,这样写上面要继承OnClickListener
接口
stop.setOnClickListener(this);
initMediaPlayer(); //
初始化MediaPlayer
}
private void initMediaPlayer() {
// TODO Auto-generated method stub
try {
//
第一个参数是地址,第二个参数是文件名称,即sd卡下面必须有一个叫做music.mp3
的文件
File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
mediaPlayer.setDataSource(file.getPath()); //
指定音频文件的路径
,调用播放器
mediaPlayer.prepare(); //
让MediaPlayer进入到准备状态
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.play:
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start(); // 开始播放
}
break;
case R.id.pause:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause(); // 暂停播放
}
break;
case R.id.stop:
if (mediaPlayer.isPlaying()) {
mediaPlayer.reset(); // 停止播放
initMediaPlayer(); //
让MediaPlayer进入到准备状态,意思是从头开始播放
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release(); //
释放资源
}
}
}
总体来说,播放器的调用还是比较简单的,没有难以理解的代码,只要是初始化播放器的方法中关于播放器的调用,其实视频的播放和音频的播放时大同小异的,不过
mp4 3gp 是android支持的视频格式,主要代码也贴下面:
在布局文件中,除了3个按钮之外,还定义了一个VideoView用来播放视频,全部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android
"
下面是活动的代码,是实现播放视频的核心,具体的代码解释在注释中:
public class SixActivity extends Activity implements OnClickListener {
//
注意,
VideoView在android已经封装好了,依id获取后即可调用相应功能,这点与MediaPlayer略有差别,不需new 对象
private VideoView videoView;
private Button playvideo;
private Button pausevideo;
private Button replayvideo;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
playvideo = (Button) findViewById(R.id.playvideo);
pausevideo = (Button) findViewById(R.id.pausevideo);
replayvideo = (Button) findViewById(R.id.replayvideo);
videoView = (VideoView) findViewById(R.id.video_view);
playvideo.setOnClickListener(this);
pausevideo.setOnClickListener(this);
replayvideo.setOnClickListener(this); //
实例化全部的按钮和点击事件
initVideoPath(); //
初始化MediaPlayer
}
private void initVideoPath() {
// TODO Auto-generated method stub
try {
//
第一个参数是地址,第二个参数是文件名称,即sd卡下面必须有一个叫做vedio.3gp
的文件
File file = new File(Environment.getExternalStorageDirectory(),"vedio.3gp");
videoView.setVideoPath(file.getPath()); //
指定视频文件的路径
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.playvideo:
if (!videoView.isPlaying()) {
videoView.start(); // 开始播放
}
break;
case R.id.pausevideo:
if (videoView.isPlaying()) {
videoView.pause(); // 暂时播放
}
break;
case R.id.replayvideo:
if (videoView.isPlaying()) {
videoView.resume(); // 重新播放
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (videoView != null) {
videoView.suspend(); //中止播放,将 VideoView 所占用的
资源释放掉。
}
}
}
总体来说,播放器的调用和音频的播放是大同小异的,其实VideoView 只是帮我们做了一个很好的封装而已,它的背
后仍然是使用 MediaPlayer 来对视频文件进行控制的。另外需要注意,VideoView 并不是一
个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。
共同进步。