Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当对方接听电话时,是否可以知道使用TelephonyManager(onCallStateChanged)的情况?_Android_Telephonymanager - Fatal编程技术网

Android 当对方接听电话时,是否可以知道使用TelephonyManager(onCallStateChanged)的情况?

Android 当对方接听电话时,是否可以知道使用TelephonyManager(onCallStateChanged)的情况?,android,telephonymanager,Android,Telephonymanager,我正在开发一个应用程序,当我开始通话时,它会启动报警(铃声),并将扬声器模式设置为打开。所以我想在我打电话的人接听电话时停止闹钟。我怎样才能做到这一点 这是我的代码: private PhoneStateListener phoneCallListener = new PhoneStateListener() { private int prevCallState=TelephonyManager.CALL_STATE_IDLE; public void onCallStat

我正在开发一个应用程序,当我开始通话时,它会启动报警(铃声),并将扬声器模式设置为打开。所以我想在我打电话的人接听电话时停止闹钟。我怎样才能做到这一点

这是我的代码:

private PhoneStateListener phoneCallListener = new PhoneStateListener() {

    private int prevCallState=TelephonyManager.CALL_STATE_IDLE;

    public void onCallStateChanged(int state, String incomingNumber) {
        try {
            AudioManager audiomanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            switch (state) {
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    if (prevCallState == TelephonyManager.CALL_STATE_IDLE){                         
                        //Inicio de llamada saliente                            
                        audiomanager.setMode(AudioManager.MODE_IN_CALL);
                        audiomanager.setSpeakerphoneOn(true);

                    } 
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    if (prevCallState == TelephonyManager.CALL_STATE_OFFHOOK){
                        //Fin de llamada saliente
                         audiomanager.setSpeakerphoneOn(false);
                    }
                    break;                   
            }
        } catch (Exception e) {

        }
    prevCallState = state;
    }
};
我将感谢任何帮助。Thanx很多。


嘿,检查此链接可能会尝试此链接,它可以帮助您解决问题。#Ravindra

我也有类似问题,无法检查此人是否已拿起电话,也无法联系到他/她的电话。在gsm网络中没有来自电话公司的反馈

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.buttonCall);

    // add PhoneStateListener
    PhoneCallListener phoneListener = new PhoneCallListener();
    TelephonyManager telephonyManager = (TelephonyManager) this
        .getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);

    // add button listener
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:+9196203333"));
            startActivity(callIntent);

        }

    });

}

//monitor phone call activities
private class PhoneCallListener extends PhoneStateListener {

    private boolean isPhoneCalling = false;

    String LOG_TAG = "LOGGING 123";

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (TelephonyManager.CALL_STATE_RINGING == state) {
            // phone ringing
            Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
        }

        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // active
            Log.i(LOG_TAG, "OFFHOOK");

            isPhoneCalling = true;
        }

        if (TelephonyManager.CALL_STATE_IDLE == state) {
            // run when class initial and phone call ended, 
            // need detect flag from CALL_STATE_OFFHOOK
            Log.i(LOG_TAG, "IDLE");

            if (isPhoneCalling) {

                Log.i(LOG_TAG, "restart app");

                // restart app
                Intent i = getBaseContext().getPackageManager()
                    .getLaunchIntentForPackage(
                        getBaseContext().getPackageName());
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);

                isPhoneCalling = false;
            }

        }
    }
}

同时在清单中给予许可

我想知道对方什么时候接电话,但我认为@tamasJozsa是对的,没有办法得到那种状态