2017-05-09 3 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を停止します。私は、USB接続経由でデバッグ

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

。サウンドを停止した後、私は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(){@Override ます。public void onCompletion(MediaPlayerのmyMediaPlayer1) { releaseMediaPlayer(); } }); ' – Json

0

問題があります:

私はオーディオ一度だけ実行することができます!

ボタンをクリックするたびに新しいMediaPlayerを作成する必要があります。それは動作しますが、再生が終了するとMediaPlayerはBGで停止しません!私がメソッドを置く場合のみ。以下のようにクリックしてMethodeの中に再び

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をnullにすると、破棄されます。私はMethodeの.setOnCompet ...

関連する問題