一、需要权限
注意:
1、两个权限都需要动态申请
2、测试手机是 Android14,运行正常,其他的版本没测试
- Manifest.permission.READ_PHONE_STATE(没有此权限会崩溃)
- Manifest.permission.READ_CALL_LOG (没有此权限回调方法不会触发,如下)
TelephonyManager.CALL_STATE_IDLE -> Log.e("监听来电", "手机状态:空闲状态") //这个倒是会触发,在注册的时候
TelephonyManager.CALL_STATE_RINGING -> Log.e("监听来电", "手机状态:来电话状态") //不会触发
TelephonyManager.CALL_STATE_OFFHOOK -> Log.e("监听来电", "手机状态:接电话状态") //不会触发
二、完整代码
val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Android 12 及以上
val listener = MyCallStateListener()
telephonyManager.registerTelephonyCallback(mainExecutor, listener)
} else {
val listener = MyPhoneStateListener()
}
@RequiresApi(Build.VERSION_CODES.S)
private inner class MyCallStateListener : TelephonyCallback(),
TelephonyCallback.CallStateListener {
override fun onCallStateChanged(state: Int) {
when (state) {
TelephonyManager.CALL_STATE_IDLE -> Log.e("监听来电", "手机状态:空闲状态")
TelephonyManager.CALL_STATE_RINGING -> Log.e("监听来电", "手机状态:来电话状态")
TelephonyManager.CALL_STATE_OFFHOOK -> Log.e("监听来电", "手机状态:接电话状态")
}
}
}
private inner class MyPhoneStateListener : PhoneStateListener() {
override fun onCallStateChanged(state: Int, phoneNumber: String?) {
when (state) {
TelephonyManager.CALL_STATE_IDLE -> Log.e("监听来电", "手机状态:空闲状态")
TelephonyManager.CALL_STATE_RINGING -> Log.e("监听来电", "手机状态:来电话状态")
TelephonyManager.CALL_STATE_OFFHOOK -> Log.e("监听来电", "手机状态:接电话状态")
}
super.onCallStateChanged(state, phoneNumber)
}
}
参考
Android 12以上TelephonyManager TelephonyCallback onCallStateChanged 方法不会被调用