2013-06-18 18 views
0

我已經讓一個MediaPlayer播放soundcloud中的一些音頻,播放和暫停正在工作,但問題是當我按下手機上的按鈕時,它會繼續播放?任何建議都會很棒。 onBackPressed代碼是在底部:)MediaPlayer不會停止播放背部按鍵,來自soundcloud的音頻

public class player1 extends Activity implements Runnable { 


private MediaPlayer mp; 
private ProgressBar progressBar; 
private ImageButton pauseicon; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.player_1); 

     pauseicon = (ImageButton) findViewById(R.id.pauseicon); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 



     /** 
     * Play button click event 
     * plays a song and changes button to pause image 
     * pauses a song and changes button to play image 
     * */ 

     String res = "https://api.soundcloud.com/tracks/84973999/stream?client_id=cd9d2e5604410d714e32642a4ec0eed4"; 

     final MediaPlayer mp = new MediaPlayer(); 
     try { 
      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
       mp.setDataSource(res); 
       mp.prepare(); 
       mp.start(); 
       progressBar.setVisibility(ProgressBar.VISIBLE); 
       progressBar.setProgress(0); 
       progressBar.setMax(mp.getDuration()); 
      } catch (IOException e) { 

      } 

     mp.setOnCompletionListener(new OnCompletionListener() { 
      //When audio is done will change pause to play 
      public void onCompletion(MediaPlayer mp) { 
       pauseicon.setImageResource(R.drawable.playicon); 
      } 
     }); 


     pauseicon.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       // No need to check if it is pauseicon 

       if(mp.isPlaying()){ 
        mp.pause(); 
       ((ImageButton) v).setImageResource(R.drawable.playicon); 

       } else { 
        mp.start(); 
        ((ImageButton) v).setImageResource(R.drawable.pauseicon); 
      }}}); 



    } 



     //To update progress bar 
    public void run() { 
     int currentPosition= 0; 
     int total = mp.getDuration(); 
     while (mp!=null && currentPosition<=total) { 
      try { 
       Thread.sleep(1000); 
       currentPosition= mp.getCurrentPosition(); 
      } catch (InterruptedException e) { 
       return; 
      } catch (Exception e) { 
       return; 
      }    
      progressBar.setProgress(currentPosition); 
     } 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 


     if (mp != null) 
     if(mp.isPlaying()) 
       mp.stop(); 

      mp.release(); 

      return true; 
     default: 
      return super.onOptionsItemSelected(item); 

    } 
    } 
    @Override 
    public void onBackPressed(){ 
     if (mp != null){ 
      if(mp.isPlaying()) 
       mp.stop(); 

      mp.release(); 
     } 

     //there is no reason to call super.finish(); here 
     //call super.onBackPressed(); and it will finish that activity for you 
     super.onBackPressed(); 

    }} 

回答

3

我認爲這個問題是在這裏:

final MediaPlayer mp = new MediaPlayer(); 

您正在創建mp的本地實例,因此您的全局實例始終爲空。

剛剛替換爲:

mp = new MediaPlayer(); 

希望工程

+0

這就是答案! –

+0

太棒了!工作!非常感謝 – user2407147

+0

歡迎,很高興它的作品,你可以標記答案爲接受,所以其他用戶可以從中受益。 –

0

不知道爲什麼,這是行不通的,在我的應用我通常覆蓋這樣說:

public boolean onKeyDown(int keyCode, KeyEvent event) {  
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    ... 

的文件說,它應該是相同的,但ID試用一下:)

編輯:final MediaPlayer從的onCreate刪除此(我注意到太晚對不起)哈哈