2017-06-07 3 views
-1

私はAndroid環境で新しく、私の問題はオーディオファイルを再生して他のアクティビティに移動するか、私がオーディオを演奏したところで私のアプリケーションをもう一度開くと、停止ボタンを押している間は止まらない。私はホームボタンを押して停止しようとすると動作します。あなたのactivityonBackPressedメソッドをオーバーライドしてresetMediaPlayerを呼び出すその後Androidで、オーディオを再生して他のアクティビティに移動すると、戻ってきてもオーディオが停止しません

void resetMediaPlayer() { 
    if(mediaPlayer!=null) { 
     try { 
      mediaPlayer.reset(); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

:誰もが にここでは、このようなメソッドを作成することができます迅速な解決のための私の活動のコード

package com.example.mudassar.myaudioapp; 

import android.content.Intent; 
import android.os.Environment; 
import android.os.NetworkOnMainThreadException; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.media.MediaPlayer; 
import android.os.Handler; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.SeekBar; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    //MediaPlayer mp; 
    Button playBtn, pauseBtn, stopBtn; 
    SeekBar sb; 
    Handler han = new Handler(); 
    MediaPlayer mp;// = MediaPlayer.create(MainActivity.this, R.raw.firefly); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     playBtn= (Button)findViewById(R.id.playBtn); 
     pauseBtn= (Button)findViewById(R.id.pauseBtn); 
     stopBtn=(Button) findViewById(R.id.stopBtn); 




     try{ 
      //you can change the path, here path is external directory(e.g. sdcard) /Music/maine.mp3 
      //mp.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/raw/.mp3"); 
      mp = MediaPlayer.create(MainActivity.this, R.raw.firefly); 
      mp.prepare(); 
     }catch(Exception e){e.printStackTrace();} 

     sb = (SeekBar)findViewById(R.id.seekBar); 
     sb.setMax(mp.getDuration()); 

     SeekUpdation(); 

     playBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       SeekUpdation(); 
       //if (mp == null) 
       if(mp.isPlaying() == false) 
        mp = MediaPlayer.create(MainActivity.this, R.raw.firefly); 
       mp.start(); 
       sb.setMax(mp.getDuration()); 
       sb.setProgress(mp.getCurrentPosition()); 
      } 
     }); 

     pauseBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       if(mp.isPlaying() == false){ 
        mp.start(); 
        sb.setProgress(mp.getCurrentPosition()); 
        Toast.makeText(MainActivity.this, "Playing", Toast.LENGTH_SHORT).show(); 
       }else if(mp.isPlaying() == true){ 
        mp.pause(); 
        sb.setProgress(mp.getCurrentPosition()); 
        Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 

     stopBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //if (mp != null) { 
       if(mp.isPlaying() == true){ 
        mp.stop(); 
        sb.setProgress(mp.getDuration()); 
        //mp = null; 
       } 
       Toast.makeText(MainActivity.this, "Stoped", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar){ 
       //if(mp!=null){ 
       if(!mp.isPlaying()){ 
        mp.seekTo(seekBar.getProgress()); 
        mp.start(); 
       } 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar){ 
       //if(mp!=null) 
       if(mp.isPlaying()){ 
        mp.pause(); 
       }else 
        mp.start(); 
      } 

      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 

      } 
     }); 

     Button btn = (Button)findViewById(R.id.secondActivityButton); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(MainActivity.this, second.class)); 
      } 
     }); 
    } 

    public void MyOwnClick(View v){ 
     startActivity(new Intent(MainActivity.this, second.class)); 
    } 

    public Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      SeekUpdation(); 
     } 
    }; 

    public void SeekUpdation() { 
     //if(mp!=null) 
     if(mp.isPlaying() == true) 
     { 
      sb.setProgress(mp.getCurrentPosition()); 
      han.postDelayed(run, 1000); 
      //Toast.makeText(MainActivity.this, "is Playing", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(MainActivity.this, "Seek", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+2

あなたのアクティビティコード彼を置く必要があります再。 –

答えて

0

は何私を提案することができます:

@Override 
public void onBackPressed(){ 
    super.onBackPressed(); 
    resetMediaPlayer() 
} 

またはmedia playerを停止する必要がある場合は、どこでも電話してください。

これはメディアプレーヤーを停止する良い方法ではありません。より高度な実装のためにあなたは、このようなあなたのresetMediaPlayer方法に変更する必要があります。

void resetMediaPlayer() { 
    if(mediaPlayer!=null) { 
     try { 
      mediaPlayer.reset(); 
      mediaPlayer.release(); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

をそして、あなたは、あなたが、たとえばメディアプレーヤーの新しいインスタンスを作成する必要がMedia Playerを開始したいとき:

void startMediaPlayer(int selectedSong) { 
    try { 
     mediaPlayer = MediaPlayer.create(activity, selectedSong); 
     mediaPlayer.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

もあなたのactivityonDestroy方法でresetMediaPlayerを呼び出す:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    resetPlayView(); 
} 
+0

resetMediaPlayer onDestroyを呼び出す方が良いです –

+0

@ S.Rあなたのアイデアはとてもうまくいっています...ありがとうございます! – Mudassar

+0

困ったことに、あなたの問題を解決したら、それを受け入れることを検討してください。 –