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