Android源码开发之通话计时功能

本文介绍了一种通过分析Android源码,利用CallLog.java在挂断电话时插入数据库的机制,实现通话计时的方法。通过监听广播,区分主叫和接听,累计通话时长并持久化存储,确保数据在设备恢复出厂设置后仍然保留。
摘要由CSDN通过智能技术生成

一开始拿到这个问题,搜了搜资料,网上有一大堆,不过,貌似都没有什么用,都是讲的理论知识,并没有实践。最开始的思路是,监听通话状态的广播,通话开始计时,挂断结束,但这样,又不好区分是主叫还是接听,拨打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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值