Фрагменты Android и TelephonyManager

У меня есть вопрос, я использую класс, который расширяет фрагменты для воспроизведения музыки через 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;
}

person Brando T.    schedule 23.09.2014    source источник


Ответы (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();
                }
            }
        }
person Philio    schedule 23.09.2014