Android 设置按钮在通话时间被禁用

Android 设置按钮在通话时间被禁用,android,Android,我有一个应用程序,可以通过点击呼叫按钮拨打号码。这里是按钮的代码onClickListener Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + obj.getPhoneNumber())); callIntent.setData(Uri.parse("tel:" + obj.getPhoneNumber())); callIn

我有一个应用程序,可以通过点击呼叫按钮拨打号码。这里是按钮的代码
onClickListener

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + obj.getPhoneNumber()));
                    callIntent.setData(Uri.parse("tel:" + obj.getPhoneNumber()));
                    callIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    startActivity(callIntent);
如何在电话呼叫开始时禁用此按钮,并在电话呼叫结束时启用?我的问题是,当拨号程序启动时,用户可以点击按钮两次,拨号程序在后台运行(不在任务顶部)

将这一行添加到您的

startActivity(callIntent);

这可以通过在
活动
类中使用并注册
PhoneStateListener
(请参阅)来实现

文档说明该类如下所示:

监听器类,用于监视设备上特定电话状态的变化,包括服务状态、信号强度、消息等待指示器(语音邮件)等

通过使用如下内部类,可以在
活动
片段
中轻松注册:

Button myButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myButton = findViewById(R.id.mybutton);
    TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    TelephonyMgr.listen(new MyListener(),
    PhoneStateListener.LISTEN_CALL_STATE);
}

public void enableButton(){
   myButton.setEnabled(true);
}

public void disableButton(){
   myButton.setEnabled(false);
}

class MyListener extends PhoneStateListener {
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
            // CALL_STATE_IDLE
            enableButton();
            break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
            //CALL_STATE_OFFHOOK
            disableButton();
            break;
            case TelephonyManager.CALL_STATE_RINGING:
            // CALL_STATE_RINGING
            disableButton();
            break;
            default:
            break;
        }
    }  
}
这将需要清单中的
读取电话状态
权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>


设备的呼叫状态列表在
TelephonyManager
-

中定义,当电话呼叫结束时,启用按钮如何?添加phoneStateLister,然后在呼叫结束时重新启用它。您需要为此编写自己的自定义类。
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>