0

電話の状態をリッスンするために、このコードを使用しています。通話が着信すると、メディアプレーヤーが一時停止しますが、通話に応答するとすぐに、リスニングスピーカーから(リンガーからではなく)再生が再開されます。また、この場合は正常に動作mediaPlayer.start()case TelephonyManager.CALL_STATE_IDLE:ますが、再び開始(再開)しません。それを行うために利用できるフラグはありますか?

 private final PhoneStateListener phoneListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
    try {
        switch (state) {
        case TelephonyManager.CALL_STATE_RINGING: 
            Toast.makeText(context, "Call is Coming",Toast.LENGTH_SHORT).show();
            mediaPlayer.pause();
        break;

        case TelephonyManager.CALL_STATE_OFFHOOK: 

        break;

        case TelephonyManager.CALL_STATE_IDLE: 
            mediaPlayer.start();

        break;

        default: 
        }
        } catch (Exception ex) {
            mediaPlayer.release();
        }
    }
};

}

またはそれを行う他の方法はありますか?

4

1 に答える 1

1

これを試して:

PhoneStateListener phoneStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if (state == TelephonyManager.CALL_STATE_RINGING) {
            //Incoming call: Pause music
        } else if(state == TelephonyManager.CALL_STATE_IDLE) {
            //Not in call: Play music
        } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
            //A call is dialing, active or on hold
        }
        super.onCallStateChanged(state, incomingNumber);
    }
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null) {
    mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
于 2014-02-26T12:28:58.313 に答える