Android开发中音频播放器的调用

本文介绍了如何在Android开发中创建一个简单的音频播放器。通过使用MediaPlayer类,实现了播放、暂停、重置和停止功能,并详细讲解了相关的方法。此外,还涉及到Activity生命周期中的状态保存与恢复,确保在不同场景下播放器能正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发中音频播放器的调用

如上图,播放器包括一个EditText,4个Button
首先,创建一个MediaPlayer类,这个媒体播放器类既可以播放视频,又可以播放音频
MediaPlay mediaPlayer = new MediaPlayer();
下面介绍MediaPlayer中的几个方法
prepare()
第一次播放之前必须调用该方法,该方法是播放器对一些硬件的调用,其实是调用本地C/C++的一些方法,如果没有调用,播放器将不能播放
start()
执行播放功能,如果之前播放器暂停过,则从暂停的地方开始播放,否则从头播放
int getCurrentPosition()
获取播放器当前的播放位置
seekTo(int position)
设置播放器从何处开始播放
reset()
使得播放器到未初始化状态,如果要重新播放,必须先调用prepare()
setDataSource(String path)
设置播放资源的路径
pause()
暂停播放

下面将展示完整的播放器代码
public class AudioActivity extends Activity {
public static final String TAG = "AudioActivity";
private EditText txt_name;
private Button btn_play;
private Button btn_pause;
private Button btn_reset;
private Button btn_stop;
private String fileName;
private MediaPlayer mediaPlayer;
private int position;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txt_name = (EditText) findViewById(R.id.txt_name);
        btn_play = (Button) findViewById(R.id.btn_play);
        btn_pause = (Button) findViewById(R.id.btn_pause);
        btn_reset = (Button) findViewById(R.id.btn_reset);
        btn_stop = (Button) findViewById(R.id.btn_stop);
        btn_play.setOnClickListener(new AudioListener());
        btn_pause.setOnClickListener(new AudioListener());
        btn_reset.setOnClickListener(new AudioListener());
        btn_stop.setOnClickListener(new AudioListener());
        mediaPlayer = new MediaPlayer();
        Log.i(TAG, "onCreate()");
    }
    private class AudioListener implements View.OnClickListener{
public void onClick(View v) {
fileName = txt_name.getText().toString();
Button button = (Button)v;
try {
switch(v.getId()){
case R.id.btn_play:
play();
      break;
case R.id.btn_pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
button.setText(R.string.go_on);
}else{
mediaPlayer.start();
button.setText(R.string.pause);
}
break;
case R.id.btn_reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
play();
}
break;
case R.id.btn_stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}

    }
     
        //下面两个方法主要是一些意外,比如突然来电时的操作
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
      position = savedInstanceState.getInt("position");
      fileName = savedInstanceState.getString("fileName");
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState()");
}
@Override
protected void onSaveInstanceState(Bundle outState) {//Activity被挂起时调用    
outState.putInt("position", mediaPlayer.getCurrentPosition());
outState.putString("fileName", fileName);
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState()");
}
        //程序退出时释放与播放器相关的资源
@Override
protected void onDestroy() {
mediaPlayer.release();
super.onDestroy();
Log.i(TAG, "onDestroy()");
}
        //当程序暂停时(比如弹出对话框等)执行的一些操作
@Override
protected void onPause() {
position = mediaPlayer.getCurrentPosition();//保存当前播放位置
mediaPlayer.pause();
super.onPause();
Log.i(TAG, "onPause()");
}
        //程序恢复时执行的操作
@Override
protected void onResume() {
if(position>0&&fileName!=null){//如果程序曾经暂停过
try {
play();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
position=0;//从原来的位置开始播放必须将原来的位置清0
}
super.onResume();
Log.i(TAG, "onResume()");
}
        //实现播放功能
private void play() throws IOException {
                //如果播放器正在播放,则不做任何操作
if(mediaPlayer.isPlaying())
return;
File audioFile = new File(Environment.getExternalStorageDirect ory(),fileName); 
mediaPlayer.reset();//播放器状态的重设
mediaPlayer.setDataSource(audioFile.getAbsolutePath());//设置播放数据源
mediaPlayer.prepare();//一些硬件的准备
mediaPlayer.start();//开始播放
mediaPlayer.seekTo(position);//设置从position位置开始播放
Log.i(TAG, "play()");
}
}
至此音频播放器结束,如有疑问,可留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值