2017-04-21 121 views
2

我的應用程序出現問題。 它是一個媒體記錄器播放器。 玩家正在工作,但問題是,當我播放歌曲或錄音機 我關閉了應用程序(退出),音樂不停止播放。 你能幫我解決我的問題嗎? 謝謝。如何在關閉應用程序時停止音樂

@Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_player); 

     albumart=(ImageView)findViewById(R.id.albumArt); 
     name=(TextView)findViewById(R.id.songName); 
     artist=(TextView)findViewById(R.id.artistName); 
     play=(ImageButton)findViewById(R.id.playButton); 
     prev=(ImageButton)findViewById(R.id.previousButton); 
     next=(ImageButton)findViewById(R.id.nextButton); 
     playlist=(ImageButton)findViewById(R.id.playlistButton); 
     sb=(SeekBar)findViewById(R.id.seekBar); 

     if(mPlayer!=null){ 
      if(su!=null){ 
       su.endthread(); 
       su.interrupt(); 
       su=null; 
      } 
      mPlayer.stop(); 
      mPlayer.release(); 
     } 

     fs=new FetchSongs(); 
     if(fs.getfetchstatus()!=true){ 
      mySongs = fs.findSongs(Environment.getExternalStorageDirectory()); 
     } 
     else{ 
      mySongs=fs.getsonglist(); 
      mPlayer.release(); 
     } 

     Intent intent=getIntent(); 
     position=intent.getIntExtra("pos",0); 
     path=mySongs.get(position).toString(); 
     u=Uri.parse(path); 

     setsongdata(path,position); 
     mPlayer=MediaPlayer.create(getApplicationContext(),u); 
     mPlayer.start(); 
     mPlayer.setLooping(true); 
     play.setImageResource(R.drawable.icone); 

     sb.setMax(mPlayer.getDuration()); 
     su=new seekUpdater(true); 
     su.start(); 

     sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

      @Override 
      public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch (SeekBar seekBar) { 
       mPlayer.stop(); 
       mPlayer.release(); 
      } 
     }); 

     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(mPlayer.isPlaying()){ 
        mPlayer.pause(); 
        play.setImageResource(R.drawable.icone); 
       } 
       else { 
        mPlayer.start(); 
        play.setImageResource(R.drawable.icone); 

       } 
      } 
     }); 

     next.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(su!=null){ 
        su.endthread(); 
        su.interrupt(); 
        su=null; 
       } 
       mPlayer.stop(); 
       mPlayer.release(); 
       position=(position+1)%mySongs.size(); 
       path=mySongs.get(position).toString(); 
       setsongdata(path,position); 
       u=Uri.parse(path); 
       mPlayer=MediaPlayer.create(getApplicationContext(),u); 
       mPlayer.start(); 
       mPlayer.setLooping(true); 
       play.setImageResource(R.drawable.icone); 
       sb.setMax(mPlayer.getDuration()); 
       sb.setProgress(mPlayer.getCurrentPosition()); 
       su=new seekUpdater(true); 
       su.start(); 
      } 
     }); 

     prev.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(su!=null){ 
        su.endthread(); 
        su.interrupt(); 
        su=null; 
       } 
       mPlayer.stop(); 
       mPlayer.release(); 
       position=(position-1<0)? mySongs.size()-1:position-1; 
       path=mySongs.get(position).toString(); 
       setsongdata(path,position); 
       u=Uri.parse(path); 
       mPlayer=MediaPlayer.create(getApplicationContext(),u); 
       mPlayer.start(); 
       mPlayer.setLooping(true); 
       play.setImageResource(R.drawable.icone); 
       sb.setMax(mPlayer.getDuration()); 
       sb.setProgress(mPlayer.getCurrentPosition()); 
       su=new seekUpdater(true); 
       su.start(); 
      } 
     }); 
     playlist.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startActivity(new Intent(getApplicationContext(),MainActivity.class)); 
      } 
     }); 
    } 

    class seekUpdater extends Thread{ 

     private boolean running; 

     seekUpdater(boolean status){ 
      running=status; 
     } 

     public void endthread(){ 
      running=false; 
     } 

     @Override 
     public void run() { 
      try { 
       while (running==true) { 
        int dur = mPlayer.getDuration(); 
        int cur = mPlayer.getCurrentPosition(); 
        while (cur < dur) { 
          sleep(500); 
          cur = mPlayer.getCurrentPosition(); 
          sb.setProgress(cur); 
        } 
       } 
      } 
      catch (InterruptedException e){ 
       e.printStackTrace(); 

       running=false; 

      } 
      //super.run(); 
     } 
    } 

    public void setsongdata(String songpath, int pos){ 
     mmr=new MediaMetadataRetriever(); 
     mmr.setDataSource(songpath); 
     try { 
      songName=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 
      art = mmr.getEmbeddedPicture(); 
      songArt = BitmapFactory.decodeByteArray(art, 0, art.length); 
      artistName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 
      artist.setText(artistName); 
      name.setText(songName); 
      albumart.setImageBitmap(songArt); 
     } 
     catch (Exception e){ 
      albumart.setImageResource(R.drawable.albumart); 
      artist.setText("Unknown Artist"); 
      name.setText(mySongs.get(pos).getName().toString().replace(".3gp","")); 
     } 
    } 


} 
+2

歡迎來到Stack Overflow!我會想象這95%的代碼與你的問題無關。請創建一個[**最小**,完整且可驗證的示例](http://stackoverflow.com/help/mcve),以說明您的問題。 –

+0

對不起 我開始學習現在 我懂了 –

回答

1

不知道自己在做什麼,但這個應該工作

mPlayer.stop(); 

@Override 
public void onPause() { 
    super.onPause(); 
    mPlayer.stop();   
} 

的onPause添加這個被稱爲每次您的活動失去焦點。

+0

我應該在哪裏使用onPause? 感謝回答 –

+0

onPause是活動生命週期的一部分。你將不得不重寫它 –

+0

我會編輯答案 –

相關問題