公众号【刘桂林】

在Android中我们想要实现监听电话状态一般都会通过TelephonyManager来监听,他提供了一个PhoneStateListener的回调方式,当然,他也是提供了广播的通知方式,如果你想要实现此功能,那么这篇文章你可以看看,我将通过这两种方式来教你如何实现此功能。

先来看下TelephonyManager的实现方式:
Android 监听来去电状态的实现_android
来看下此代码,首先我初始化了一个TelephonyManager之后直接监听PhoneStateListener,在PhoneStateListener中有一个回调onCallStateChanged里有两个餐数,一个为状态,一个是号码,这样,我们就可以实现监听了,是不是比较简单,不过要记住的是需要添加权限:

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

同样的,当前系统版本大于或者等于M的话需要动态申请,可以看下onCreate方法中的示例,接着我们来看下广播如何实现吧。
Android 监听来去电状态的实现_android_02
看这段代码,我监听了两个广播,一个是拨号广播,一个是状态广播,然后再状态广播中和之前一样判断三个电话状态,得到如下打印:
Android 监听来去电状态的实现_静态文件_03
至此,我们就可以监听到状态了,同样的,我们需要在静态文件里注册

<receiver
android:name=".CallStateReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>