【问题标题】:Android Fragments and TelephonyManagerAndroid Fragments 和 TelephonyManager
【发布时间】:2014-09-23 23:00:52
【问题描述】:

我有一个问题,我正在使用一个扩展 Fragments 的类来通过 MusicPlayer 播放音乐,在这个类中,如果有来电,它使用 PhoneStateListener 和 TelephonyManager 来暂停音乐,一切正常,怀疑是当我启动应用程序,歌曲自动开始,想避免这种情况,有什么建议吗??这是我的代码的一部分:

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;
}

【问题讨论】:

    标签: android android-fragments telephonymanager android-music-player


    【解决方案1】:

    它是由这个块中的代码开始的吗?

            } 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();
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2018-12-15
      • 2012-10-24
      相关资源
      最近更新 更多