2

我有一個問題,我使用一個擴展片段來通過MusicPlayer播放音樂的類,在這個類內使用PhoneStateListener和TelephonyManager暫停音樂,如果有來電,一切正常,懷疑有是當我啓動應用程序,歌曲自動啓動,並希望避免這一點,任何建議?我的代碼在這裏部分:Android碎片和電話管理器

PS:對不起我的英文不好

public class FragmentPlaySong extends Fragment implements MediaPlayer.OnCompletionListener { 

private MediaPlayer mediaPlayer; 
... 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_play_song, container, false); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setOnCompletionListener(this); 
    ... 
    ... 

    //Service MediaPlayer pause when Incoming Call 
    PhoneStateListener phoneStateListener = new PhoneStateListener(){ 
     public void onCallStateChanged(int state, String incomingNumber){ 
      if (state == TelephonyManager.CALL_STATE_RINGING) { 
       if (mediaPlayer != null){ 
        if (mediaPlayer.isPlaying()){ 
         mediaPlayer.pause(); 
        } 
       } 
      } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application 
       if (mediaPlayer != null){ 
        if (!mediaPlayer.isPlaying()){ 
         mediaPlayer.start(); 
        } 
       } 
      } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { 
       if (mediaPlayer != null){ 
        if (mediaPlayer.isPlaying()){ 
         mediaPlayer.pause(); 
        } 
       } 
      } 
      super.onCallStateChanged(state, incomingNumber); 
     } 
    }; 

    TelephonyManager mgr = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); 
    if (mgr != null){ 
     mgr.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE); 
    } 

    return view; 
} 

回答

0

是它得到該塊中的代碼開始了嗎?

 } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application 
      if (mediaPlayer != null){ 
       if (!mediaPlayer.isPlaying()){ 
        mediaPlayer.start(); 
       } 
      } 
     } 

如果是這樣,你可能只需要有一個標誌,例如

private boolean mPlaying; 

它設置爲true當音樂是由用戶手動啓動,則上述塊更改爲類似:

 } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application 
      if (mediaPlayer != null){ 
       if (mPlaying && !mediaPlayer.isPlaying()){ 
        mediaPlayer.start(); 
       } 
      } 
     } 
+0

OK OK,這是簡單的東西。謝謝。 – 2014-09-24 13:48:53