2017-05-09 155 views
1

我可以停止音频,但如果我检查我的Android Studio调试窗口,我看到MediaPlayer在后台工作!如何正确停止MediaPlayer?

我弹奏的声音那样:

try { 
myMediaPlayer1 = new MediaPlayer(); 
myMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); 
myMediaPlayer1.setDataSource("http://myweb.com/audios/1.mp3"); 
myMediaPlayer1.prepare(); 
myMediaPlayer1.start();  
} catch (Exception e) { 
// TODO: handle exception 
} 

我通过按钮或OnDestry那样的点击停止MediaPlayer的:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    myMediaPlayer1.stop(); 
} 

我通过USB连接调试。停止声音后我看到MediaPlay在后台运行: Here is the Screenshot:

回答

0

您需要使用mediaPlayer.release()发布媒体播放器。如果MediaPlayer未播放任何歌曲/音频,则不应停止MediaPlayer。请参阅下面的代码获取更多帮助

private void releaseMediaPlayer() { 
    try { 
     if (mediaPlayer != null) { 
      if (mediaPlayer.isPlaying()) 
       mediaPlayer.stop(); 
      mediaPlayer.release(); 
      mediaPlayer = null; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

感谢,它的工作原理: 'myMediaPlayer1.setOnCompletionListener(新MediaPlayer.OnCompletionListener(){ @覆盖 公共无效onCompletion(MediaPlayer的myMediaPlayer1) { releaseMediaPlayer(); } });'' – Json

0

有一个问题:

我可以运行音频只有一次!

所以我必须在每次点击按钮时创建新的MediaPlayer。它可以工作,但是当音频播放结束时MediaPlayer不会停留在BG中!只有当我把这个方法;

myMediaPlayer1.setOnCompletionListener 

再次点击梅索德象下面这样:

MediaPlayer myMediaPlayer1; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myMediaPlayer1 = new MediaPlayer(); 
    myMediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer myMediaPlayer1) { 
      releaseMediaPlayer(); 
     } 
     }); 
     } 
     public void Play_Audio(View view) { 
    try { 
     releaseMediaPlayer(); 
     myMediaPlayer1=null; 
     myMediaPlayer1 = new MediaPlayer(); 
     player.setDataSource("http://myweb.com/audios/1.mp3"); 
     myMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     myMediaPlayer1.prepare(); 
     myMediaPlayer1.start(); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 


myMediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer myMediaPlayer1) { 
     releaseMediaPlayer(); 
    } 
    }); 

} 
    private void releaseMediaPlayer() { 
     try { 
      if (myMediaPlayer1 != null) { 
      if (myMediaPlayer1.isPlaying()) 
      myMediaPlayer1.stop(); 
      myMediaPlayer1.release(); 
      myMediaPlayer1= null; 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 

我现在的问题是:

为什么OnComplet ...在OnCreate中,不能正常工作?

它会被销毁,当我们使MediaPlayer为空时,也许。所以我要创建梅索德.setOnCompet ...通过点击每次