Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android如何完美删除MediaPlayer_Android_Android Mediaplayer - Fatal编程技术网

Android如何完美删除MediaPlayer

Android如何完美删除MediaPlayer,android,android-mediaplayer,Android,Android Mediaplayer,我正在尝试开发一个简单的测试项目,当我点击按钮时播放声音,并在播放声音几分钟后自动停止 以下是一段代码片段: 播放代码: if (mPlayer != null) mPlayer = null; mPlayer = MediaPlayer.create(this, R.raw.shush_v2); mPlayer.setLooping(true); mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

我正在尝试开发一个简单的测试项目,当我点击按钮时播放声音,并在播放声音几分钟后自动停止

以下是一段代码片段:

播放代码:

if (mPlayer != null) mPlayer = null;

mPlayer = MediaPlayer.create(this, R.raw.shush_v2);

mPlayer.setLooping(true);

mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
     @Override
     public void onPrepared(MediaPlayer mediaPlayer) {
          mediaPlayer.start();
     }
});
if(mPlayer != null && mPlayer.isPlaying()) {               
     mPlayer.stop();

     mPlayer.reset();

     mPlayer.release();

     mPlayer = null;
}
停止代码:

if (mPlayer != null) mPlayer = null;

mPlayer = MediaPlayer.create(this, R.raw.shush_v2);

mPlayer.setLooping(true);

mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
     @Override
     public void onPrepared(MediaPlayer mediaPlayer) {
          mediaPlayer.start();
     }
});
if(mPlayer != null && mPlayer.isPlaying()) {               
     mPlayer.stop();

     mPlayer.reset();

     mPlayer.release();

     mPlayer = null;
}
但有时我在停止声音后仍能听到两种声音


以前见过这种行为吗?

您应该清除媒体播放器

public class PlayerApp extends Activity {
    Button btnStart;
    MediaPlayer mediaPlayer = null;

    // Use the handler to stop the Player, after specific time
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player_app);
        btnStart = (Button)findViewById(R.id.btnStart);
        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                // Initialize Player and start it.
                // Call the Handler same time.
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.test);
                mediaPlayer.start();
                startHandler();
            }
        });
    }
    private void startHandler()
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // if Player is not null, then Stop it and Reset Null.
                if(mediaPlayer!=null)
                {
                    mediaPlayer.stop();
                    mediaPlayer = null;

                }
            }
        }, 2500);
    }

}
  //example usage of clearing media player when its over.
  ourSong.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        clearMediaPlayer(mp);
    }
  });
  //You can use this to stop media player.
  private void clearMediaPlayer(MediaPlayer mp){
    if(mp!=null){
          mp.stop();
          mp.release();// this will clear memory
          mp = null;
    }
  }

嗨,贾斯普里特,我检查了你的答案,并尝试了一下,但这里同样是我的全部代码。