单击按钮后如何释放Media Player的声音

时间:2014-11-30 21:40:40

标签: android eclipse

我真是个新人。所以我的问题可能很简单。我有一个按钮,想要点击该按钮后发出声音。这样可行。但我有更多的活动。过了一段时间我得到一个MediaPlayer(-19,0)错误,这意味着我必须释放媒体播放器。但我不知道如何发布它。请问你能帮帮我吗。这是按钮点击的代码:

final MediaPlayer mpButtonKlick = MediaPlayer.create(this, R.raw.sound);

        btn = (Button)findViewById(R.id.button1); 
        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) { 
                // TODO Auto-generated method stub
                mpButtonKlick.start();

            }
        });

2 个答案:

答案 0 :(得分:1)

初始化onResume中的资源并在onPause中释放它:

MediaPlayer mpButtonKlick;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ....
    btn = (Button)findViewById(R.id.button1); 
    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) { 
            // TODO Auto-generated method stub
            mpButtonKlick.start();

        }
    });
    // ...
}

@Override
protected void onResume() {
    super.onResume();
    mpButtonKlick = MediaPlayer.create(this, R.raw.sound);
}

@Override
protected void onPause() {
    super.onPause();
    mpButtonKlick.release();
    mpButtonKlick = null;
}

答案 1 :(得分:1)

按以下方式更新您的代码

 final MediaPlayer mpButtonKlick = MediaPlayer.create(this, R.raw.sound);

            btn = (Button)findViewById(R.id.button1); 
            btn.setOnClickListener(new View.OnClickListener() {
@Override
        public void onClick(View v) {
        if(mpButtonKlick.isPlaying())
        {  
            mpButtonKlick.stop();
            mpButtonKlick.reset();
        } 
        try {

            AssetFileDescriptor afd;
            afd = getAssets().openFd("AudioFile.mp3");
            mpButtonKlick.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            mpButtonKlick.prepare();
            mpButtonKlick.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
   }
});
  }
            });