如何防止我的音乐播放器在手机响铃后挂机并挂机?

时间:2017-01-23 16:45:12

标签: java android android-studio audio android-mediaplayer

此代码有效。我遇到的唯一问题是,当我没有使用应用程序并且电话响铃时,我挂断电话后会播放音乐。

public void level_one(View view){

        mp3 = MediaPlayer.create(this, R.raw.alpha_12);

        PhoneStateListener phoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                if (state == TelephonyManager.CALL_STATE_RINGING) {
                    mp3.pause();
                } else if(state == TelephonyManager.CALL_STATE_IDLE) {
                    mp3.start(); // Runs this line even if I didn't play
                } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    mp3.pause();
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        };
        TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        if(mgr != null) {
            mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }

1 个答案:

答案 0 :(得分:2)

只需引入一个布尔值即可跟踪音乐是否曾播放过。我刚刚完成了你周围的课程,但你明白了。

public class MyClass
{
    private boolean isMusicPlaying = false;

    public void someFunctionWhichStartsMusic()
    {
        //start the music

        isMusicPlaying = true;
    }

    public void level_one(View view){

        mp3 = MediaPlayer.create(this, R.raw.alpha_12);

        PhoneStateListener phoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                if (state == TelephonyManager.CALL_STATE_RINGING)
                {
                    mp3.pause();
                }
                else if(state == TelephonyManager.CALL_STATE_IDLE
                          && isMusicPlaying) // pay attention to this!
                {
                    mp3.start();
                }
                else if(state == TelephonyManager.CALL_STATE_OFFHOOK)
                {
                    mp3.pause();
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        };
        TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        if(mgr != null) {
            mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }
}