android 电话状态监听(来电和去电)实现代码


在Android开发中,监听电话状态(包括来电和去电)通常需要使用到`PhoneStateListener`类。以下是一个简化的示例,展示如何设置和注册这个监听器来监听来电和去电状态。

首先,你需要在你的Android应用中声明所需的权限。在你的`AndroidManifest.xml`文件中添加以下权限:


<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" /> <!-- 如果需要应答电话 -->

注意:从Android 6.0(API级别 23)开始,`READ_PHONE_STATE`权限在运行时被认为是正常权限,通常会在安装时自动授予。但是,`ANSWER_PHONE_CALLS`权限在大多数设备上可能不会被授予给第三方应用,除非设备制造商特别允许。

接下来,你可以创建一个类来管理电话状态的监听。这里是一个简单的例子:


import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class PhoneCallListener {

    private TelephonyManager telephonyManager;
    private PhoneStateListener customPhoneStateListener;

    public PhoneCallListener(Context context) {
        telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        customPhoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);

                switch (state) {
                    case TelephonyManager.CALL_STATE_RINGING:
                        // 来电
                        // 可以在这里处理来电事件,比如显示一个来电UI
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        // 去电或通话中
                        // 可以在这里处理去电或通话中事件
                        break;
                    case TelephonyManager.CALL_STATE_IDLE:
                        // 无活动,电话挂断
                        // 可以在这里处理电话挂断事件
                        break;
                }
            }
        };

        // 注册监听器
        telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }

    // 当不再需要监听电话状态时,可以调用此方法注销监听器
    public void unregisterListener() {
        if (telephonyManager != null) {
            telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_NONE);
        }
    }
}

然后,在你的Activity或其他合适的地方创建`PhoneCallListener`的实例,并传入当前的`Context`。

请注意,这个示例仅提供了基本的框架和思路。在实际应用中,你可能需要根据具体需求进行扩展和错误处理。此外,由于Android版本的更新和设备的差异,某些功能可能在不同设备上表现不同。因此,在发布应用之前,请确保在多种设备和Android版本上进行充分的测试。