2

私は次のコードを持っており、発信通話の呼び出し状態は、2 者間の電話が接続されているときにアクティブであり、相手が実際にあなたが電話していることを確認して電話に出ることができることを読みました。アイドル状態は通話が切断されたときで、OFF_HOOK 状態はボタンを押してダイヤルした瞬間です。OFF_HOOK と IDLE 状態になっていますが、呼び出し状態にはなりません。何が問題でしょうか? .任意の助けをいただければ幸いです。

public void onReceive(final Context context, Intent intent) {
            TelephonyManager Tm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            Tm.listen(new PhoneStateListener(){
                public void  onCallStateChanged(int state,String number) {
                    super.onCallStateChanged(state, number);
                    switch (state) {
                      case TelephonyManager.CALL_STATE_IDLE:
                          //when Idle i.e no call
                          Toast.makeText(context, "Phone state Idle", 1).show();

                          break;
                      case TelephonyManager.CALL_STATE_OFFHOOK:

                          //when Off hook i.e in call
                          //Make intent and start your service here
                          Toast.makeText(context, "Phone state Off hook", 1).show();

                          break;
                      case TelephonyManager.CALL_STATE_RINGING:
                          Toast.makeText(context, "Phone state Ringing", 1).show();
                        break;


                      default:
                          break;
                      }
                  }    

            },PhoneStateListener.LISTEN_CALL_STATE);
4

2 に答える 2

0

オンラインのどこかにコピーしたこのヘルパー クラスを試してみてください。場所が思い出せません。

/*Helper class to detect incoming and outgoing calls.*/
public class CallHelper {
    private Activity activity;
    private TelephonyManager tm;
    private CallStateListener callStateListener;
    private OutgoingReceiver outgoingReceiver;
    public String TelephoneNumber;
    public boolean InCall = false;

    public CallHelper(Activity activity) {
        this.activity = activity;
        callStateListener = new CallStateListener();
        outgoingReceiver = new OutgoingReceiver();
    }

    /*Listener to detect incoming calls.*/
    private class CallStateListener extends PhoneStateListener {

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING: {
                    TelephoneNumber = incomingNumber;
                    inout = "in";
                    InCall = false;
                    break;
                }
                case TelephonyManager.CALL_STATE_OFFHOOK: {
                    if (!InCall) {
                        InCall = true;
                        //Do your stuff here when in call...
                    }
                    break;
                }
                case TelephonyManager.CALL_STATE_IDLE: {
                    InCall = false;
                    break;
                }
                default: {
                    InCall = false;
                    break;
                }
            }
        }
    }

    /*Broadcast receiver to detect the outgoing calls.*/
    public class OutgoingReceiver extends BroadcastReceiver {
        public OutgoingReceiver() { }

        @Override
        public void onReceive(Context context, Intent intent) {
            TelephoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        }
    }

    /*Start calls detection.*/
    public void start() {
        tm = (TelephonyManager) activity.getSystemService(Activity.TELEPHONY_SERVICE);
        tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
        activity.registerReceiver(outgoingReceiver, intentFilter);
    }

    /*Stop calls detection.*/
    public void stop() {
        tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
        activity.unregisterReceiver(outgoingReceiver);
    }
}
于 2014-06-29T05:56:16.647 に答える