Android笔记——对系统通话记录的删除操作
手机通话记录是保存在数据库中的,位置: /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()));
Android笔记——对系统通话记录的删除操作的更多相关文章
- 【笔记】AJAX+SweetAlert插件实现删除操作
[笔记]AJAX+SweetAlert插件实现删除操作 Django AJAX SweetAlert 展示 SweetAlert 插件介绍 SweetAlert 是一个 JS 插件,能够完美替代 J ...
- MongoDB快速入门学习笔记6 MongoDB的文档删除操作
db.集合名称.remove({query}, justOne)query:过滤条件,可选justOne:是否只删除查询到的第一条数据,值为true或者1时,只删除一条数据,默认为false,可选. ...
- Android 4.3 系统裁剪——删除不使用的app及添加自己app
删除不使用的apk 系统自带的app位置是在/android4.3/packages/apps 以下是一些APP作用分析: | |– BasicSmsReceiver | |– Bluetooth ( ...
- Android群英传笔记——第一章:Android体系与系统架构
Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起 ...
- android 获取通话记录
在manifest添加以下权限<uses-permission android:name="android.permission.READ_CALL_LOG" />&l ...
- Android通讯录管理(获取联系人、通话记录、短信消息)
前言:前阵子主要是记录了如何对联系人的一些操作,比如搜索,全选.反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清 ...
- 【Android】Android6.0读取通话记录
需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...
- Android笔记之 文件保存、压缩与清空删除
这两天改进优化项目中图片上传的代码.考虑到可能有7.8M的比較大的图片,由于要先进行压缩.所以设计到文件的压缩,保存与清空删除操作. 在这里记下笔记. /** * 压缩并另存为,每次先清空再保存 */ ...
- Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
本人微信公众号:微软动态CRM专家罗勇 ,回复298或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 系统 ...
随机推荐
- 源码编译tmux
(1)clone 源代码仓库: $ git clone https://github.com/tmux/tmux.git (2) 编译之前先安装libevent,去官网下载tar包: http://l ...
- 在Vim中使用gtags
之前一直使用vim+ctags+cscope来弄c的代码,最近看同事使用gtags,觉得在搜索方面要高级很多,网上大多都是emacs+gtags的资料,而vim的则比较少,这里搞通了之后,做个记录. ...
- Android响应式UI教程
原文:Responsive UI Tutorial for Android 作者:James Nocentini 译者:kmyhy 2017/5/4 更新说明: 由 James Nocentini 更 ...
- Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump
相关文章 Android性能优化系列 Java虚拟机系列 前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存 ...
- 3. 什么是JSR参考实现? - JavaEE基础系列
本文是JavaEE基础系列的第三节. Java EE简介 - JavaEE基础系列 JSR简介 - JavaEE基础系列 上一节中, 我们介绍了什么是JSR.JSR就是一个提交到JCP的抽象请求,包含 ...
- iOS调用第三方API/Framework
前言 老板不止一次地说过:这个世纪靠个人的能力去完成一件事情肯定是不够的.无论什么方面我们都可以找到许许多多的事例表明合作共赢的重要性,例如Linux的发展.建筑事务所的发展.乃至科学技术的发展等等. ...
- 【解题报告】Codeforces Round #301 (Div. 2) 之ABCD
A. Combination Lock 拨密码..最少次数..密码最多有1000位. 用字符串存起来,然后每位大的减小的和小的+10减大的,再取较小值加起来就可以了... #include<st ...
- HDU - 1142:A Walk Through the Forest (拓扑排序)
Jimmy experiences a lot of stress at work these days, especially since his accident made working dif ...
- Java并发--线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- hbase单机及集群安装配置,整合到hadoop
问题导读:1.配置的是谁的目录conf/hbase-site.xml,如何配置hbase.rootdir2.如何启动hbase?3.如何进入hbase shell?4.ssh如何达到互通?5.不安装N ...