一般情况下,基于android9.0我们可以通过复制一个系统电话出来,但大多数权限是获取不到的,因此还是相对安全的(就算要获取关键信息也会弹出授权)。如果你的手机root过或者厂商定制过,那就要当心了,app通过以下方式完全监听手机电话:
一、通过获取通话记录掌握所有通话。
root或系统权限可以直接获取到。
二、这个是本文的主要内容,方便解决拥有系统权限定制自己电话app功能的状态问题。
app完全接管了系统的拨号及通话页面,就像真实系统电话存在一样。但若没有系统权限还是没有很多状态无法获取到,就比如去电时判断对方是否真实接通还是处于对方振铃状态。
在应用层监听通话状态只有三种,从TelephonyManager.java中注释可知这三种状态含义如下:
CALL_STATE_IDLE :空闲态(没有通话活动)
CALL_STATE_RINGING :包括响铃、第三方来电等待
CALL_STATE_OFFHOOK 摘机(接听):包括dialing拨号中、active接通、hold挂起等
<!-- 清单文件中, 申明监听通话精确状态权限,该权限需要android:sharedUserId="android.uid.system" -->
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
监听通话状态:
mReceiver = new MobileCallReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
filter.addAction(CustomAction.PRECISE_CALL_STATE);
registerReceiver(mReceiver, filter);
/******************** 此处省略一万行 ************************/
class MobileCallReceiver extends BroadcastReceiv