一开始拿到这个问题,搜了搜资料,网上有一大堆,不过,貌似都没有什么用,都是讲的理论知识,并没有实践。最开始的思路是,监听通话状态的广播,通话开始计时,挂断结束,但这样,又不好区分是主叫还是接听,拨打112等电话可能也被计时,果断放弃了这个。接着,想从calllog入手,通过查询calllog来获取通话时长,不过,如果把通话记录删掉,也是无济于事,况且boss还要求通话计时,即使恢复出厂设置,数据也不被擦除,这样显然不行。后来看看源码,发现了倪端,每次挂断电话,都会把通话日志插入数据库,我们就可以去这里入手。
frameworks/base/core/java/android/provider/CallLog.java
-----------------------
public static Uri addCall(CallerInfo ci, Context context, String number,
int presentation, int callType, int features, PhoneAccountHandle accountHandle,
long start, int duration, Long dataUsage, boolean addForAllUsers,
long conferenceCallId) {
-----------------------
Intent intent = new Intent("com.android.action.CALL_TOTAL_CALCULATE");//携带数据,发送广播,数据累加不在这里做运算
Bundle bundle = new Bundle();
bundle.putLong("duration",Long.valueOf(duration));
bundle.putInt("type", Integer.valueOf