1

アプリは着信をリッスンしてから音楽の再生を停止します。次に、通話が終了した後に音楽を再開したいと思います。しかし、アプリの起動時に検出さCALL_STATE_IDLEれるので問題が発生しているため、そのメソッド内の呼び出しはアプリの起動時に呼び出されます。

私のコードは次のようになります。

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   ...
    listenForIncomingCall();
   ...
   }
    private void listenForIncomingCall() {
    PhoneStateListener phoneStateListener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if (state == TelephonyManager.CALL_STATE_RINGING) {
                //Incoming call: Pause music
                //stop playing music
            } else if (state == TelephonyManager.CALL_STATE_IDLE) {
                //Not in call: Play music

            //a code placed here activates on app starts

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

どうすればこれを防ぐことができますか?リスナーが登録されていない場合、どうすれば登録できonCreateますか?

4

1 に答える 1

2

私は代替の解決策を見つけました。お気軽にご利用ください。誰かがより良いものを持っている場合は、コミュニティとそれを共有してください。

private void listenForIncomingCall() {
    PhoneStateListener phoneStateListener = new PhoneStateListener() {
        boolean toTrack = false; //to prevent triggering in onCreate

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if (state == TelephonyManager.CALL_STATE_RINGING) {
                //Incoming call: Pause music
                doSomething();
            } else if (state == TelephonyManager.CALL_STATE_IDLE) {
                //Not in call: Play music
                if (toTrack) {
                    doSomething();
                }
                toTrack = true;
            } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                //A call is dialing, active or on hold
                if (toTrack) {
                    doSomething();
                }
                toTrack = true;
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };
    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    if (mgr != null)

    {
        mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
}
于 2012-12-10T15:00:46.727 に答える