Android笔记——对系统通话记录的删除操作
2024-10-19 18:28:56
手机通话记录是保存在数据库中的,位置: /data/data/com.android.providers.contacts/databases/calllog.db ,表名:calls
这张表中有个type字段,属性值为常量值:
- 来电:CallLog.Calls.INCOMING_TYPE (常量值:1)
- 已拨:CallLog.Calls.OUTGOING_TYPE(常量值:2)
- 未接:CallLog.Calls.MISSED_TYPE(常量值:3)
这是最常见的,number字段表示电话号码,还有些其他字段就不一一说明了
添加权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
前两个权限是读/写联系人的权限,最后一个是写通话记录的权限,这个权限我之前并没有加上,但是在操作通话记录时,Android Studio推荐加上这个权限,否则就会划红线,但是并不影响程序运行
编写代码
系统通过ContentProvider (内容提供器)向外共享。
Uri
CallLog.Calls.CONTENT_URI 等价于:Uri.parse("content://call_log/calls"); 用哪个都可以
获取内容解析器
ContentResolver resolver = getContentResolver();
getContentResolver()方法是Content类的方法
操作内容解析器
其实操作和操作Sqlite的方法几乎一样,比如说删除操作:
resolver.delete(CallLog.Calls.CONTENT_URI, "number=?", new String[]{number});
会删除给定的号码的所有记录,还可以增加个条件(如 type=1),删除给定的号码的来电记录
查询某个联系人的所有通话记录可以使用(query方法)
resolver.query(CallLog.Calls.CONTENT_URI, null, "number=?", new String[]{number}, null);
虽然删除了电话号码记录,但是可能会有延迟,所以我们查询电话号码表是否改变了
在MainActivity中增加一个类继承ContentObserver 用来观察电话号码表是否改变,如果发生变化,则再次删除该号码
/**
* ContentObserver 上下文观察者
*/
class CallLogObserver extends ContentObserver {
private String number; public CallLogObserver(String number, Handler handler) {
super(handler);
this.number = number;
} /**
* 如果通话记录发生改变
*
* @param selfChange
*/
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
deleteCallLog(number);
}
}
别忘了调用这个类,通过getContentResolver()获得解析器,再调用registerContentObserver方法,注意最后一个变量给的就是编写的CallLogObserver类
getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, new CallLogObserver(incomingNumber, new Handler()));
最新文章
- HTTP Keep-Alive模式
- 关于电磁场中的E.B.D.H的理解
- ecstore菜鸟电子面单对接摘要
- C#中常用的排序算法的时间复杂度和空间复杂度
- BI任务列表
- js dom操作获取节点的一些方法
- iOS堆栈-内存-代码在据算机中的运行
- 关于identifier was truncated to &#39;255&#39; characters
- ";fatal: protocol error: bad line length character: No This";
- JSON WEB Token(JWT)
- 记一次生产环境thrift服务的配置问题
- 运维笔记--ubuntu管理启动项
- 解析:为什么程序员应该有一台Mac个人电脑?
- python基础(1)-helloworld
- html5的鼠标拖拽
- R语言读取Hive数据表
- [转]Java虚拟机是如何判断变量类型的
- Mweb发布博客
- Android Studio 无法预览布局问题:com/android/util/PropertiesMap
- 云计算之路-阿里云上:SLB会话保持的一个坑