2017-04-21 120 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

我会编辑答案 –

相关问题