现在编写一个测试活动,用循环模式播放assets/目录下的一个音频文件。该音效将根据活动的生命周期实现暂停和恢复,当活动暂停时,音乐也要暂停;而活动恢复时,音乐也要从上次暂停的地方开始播放。
代码如下:
package org.example.ch04_Android_basics;
import java.io.IOException;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.TextView;
public class MediaPlayerTest extends Activity {
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
setContentView(textView);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mediaPlayer = new MediaPlayer();
try{
AssetManager assetManager = getAssets();
AssetFileDescriptor descriptor = assetManager.openFd("music.ogg");
mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength());
mediaPlayer.prepare();
mediaPlayer.setLooping(true);
}catch(IOException e){
textView.setText("Couldn't load music file, " + e.getMessage());
mediaPlayer = null;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(mediaPlayer != null){
mediaPlayer.pause();
if(isFinishing()){
mediaPlayer.stop();
mediaPlayer.release();
}
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(mediaPlayer != null)
mediaPlayer.start();
}
}
在onResume()方法中,我们只需启动MediaPlayer(如果已经成功创建它)。onResume()方法是一个处理该操作的完美地方,因为它在onCreate()方法和onPause()方法之后被调用。在第一种情况下,它将第一次启动播放;在第二种情况下,它将简单地恢复已暂停的MediaPlayer。
在onPause()方法中,我们暂停MediaPlayer。如果该活动被销毁,我们还需要停止该MediaPlayer并释放所有资源。