Android笔记——对系统通话记录的删除操作

手机通话记录是保存在数据库中的,位置:  /data/data/com.android.providers.contacts/databases/calllog.db ,表名:calls

这张表中有个type字段,属性值为常量值:

  1. 来电:CallLog.Calls.INCOMING_TYPE (常量值:1)
  2. 已拨:CallLog.Calls.OUTGOING_TYPE(常量值:2)
  3. 未接: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()));
时间: 2024-09-29 23:30:56

Android笔记——对系统通话记录的删除操作的相关文章

操作Android中联系人,通话记录,短息,的URI,和具体的查询语句,字段注解。(根据自己需求)

记住读取联系人需要配置权限:<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 读取联系人的URI: /** * 所有联系人的查询语句 * cotacts2联系人数据库中 * 与联系人相关的几张数据表 * contacts

Android 手机卫士8--删除通话记录

1.编写代码需要注意bug: 再删除通话记录的时候,删除的是以前的通话记录,本次拦截下来的电话号码,通话记录没有删除?????? 问题原因:数据库中本次通话记录的电话号码还没有插入,就做了删除操作 2.bug解决方法: 内容提供者:对外提供数据库的访问方式 内容解析器:用内容提供者提供的访问方式Uri,访问数据库(增删改查) 内容观察者:观察数据库的变化,一旦数据发生改变,调用相应方法 通过内容观察者,观察数据库的插入,一旦有插入,则做删除此条插入数据操作 public void endCall

Android通讯录管理二之通话记录获取

上一篇博客讲的是获取联系人信息,这篇是获取通话记录 同样你可以在这里下载http://download.csdn.net/detail/waniu123/8554533 package cn.zxw.contact.domain; /** * 通话记录 * @author zhan * */ public class CallLogInfo { public String number; public long date; public int type; public CallLogInfo(

删除通话记录怎样恢复

删除通话记录怎样恢复?我们现在有的时候可能会因为一些比较小的原因,就会导致我们的手机通话记录被删除,那么我们若是想要找回我们删除的手机通话记录,是不是可以呢?又该怎么找回呢? 首先,若是我们有进行过备份,那么我们直接从备份里面还原就可以了,若是没有进行过备份的话,我们也是可以通过使用我们的手机云备份来进行找回的,若是我们的手机云备份也没有的话,我们可以试试下面的办法. 1.在此恢复过程中我们需要首先打开电脑, 可以先在电脑浏览器上下载安装"互盾安卓恢复大师"的安装包,使用USB数据线将

恢复手机通话记录原来如此简单

平时我们在进行手机清理时可能会将一些需要用到的通话记录删除,这该怎么办呢?若是不小心删除了通话记录,可以通过恢复工具来找回,下面是具体的操作方法,来看看.如何找回手机通话记录?具体的操作步骤如下:第一步:在手机的软件管理市场或者浏览器中,搜索并查找"极速数据恢复"工具,这款工具可以恢复手机误删的通话记录,安装工具之后,按照相关步骤进行操作.第二步:点击打开已经安装好的恢复工具,进入界面点击"通话记录恢复"版块进入,它就会对手机的数据进行扫描.第三步:系统进入扫描阶段

安卓手机通话记录删了还能恢复吗

安卓手机通话记录删了还能恢复吗?我们在平常的时候,经常会因为自己的一些失误操作导致我们的通话记录被删除,其实被删除之后,我们有的时候根本就不担心,因为是可以通过一些方法找回的.若是使用的方法都没有找回通话记录该怎么办呢?下面小编就给大家分享一个找回通话记录的新办法.步骤一:我们可以在手机应用商城或是手机浏览器查找"极速数据恢复"工具,下载并安装在手机上.步骤二:打开恢复工具,我们就可以看到手机界面出现的几大恢复功能选项,选择"通话记录恢复"功能就可以了.步骤三:这时

Android 4.3 系统裁剪——删除不使用的app及添加自己app

删除不使用的apk 系统自带的app位置是在/android4.3/packages/apps 以下是一些APP作用分析: | |– BasicSmsReceiver | |– Bluetooth (蓝牙) | |– Browser (浏览器) | |– Calculator (计算器) | |– Calendar (日历) | |– Camera (相机) | |– CellBroadcastReceiver | |– CertInstaller (在Android中安装数字签名.被调用) |

Android批量添加通话记录

在前面有提到批量添加联系人:Android批量添加联系人到通讯录,通话记录和通讯录一样都是直接操作ContentProvider.为了使批量更新.插入.删除数据更加方便,android系统引入了 ContentProviderOperation类,使用ContentProviderOperation的理由 1.所有的操作都在一个事务中执行,这样可以保证数据完整性 2.由于批量操作在一个事务中执行,只需要打开和关闭一个事务,比多次打开关闭多个事务性能要好些 3.使用批量操作和多次单个操作相比,减少

Android 4.3 系统裁剪——删除不使用的app及增加自己app

删除不使用的apk 系统自带的app位置是在/android4.3/packages/apps 下面是一些APP作用分析: | |– BasicSmsReceiver | |– Bluetooth (蓝牙) | |– Browser (浏览器) | |– Calculator (计算器) | |– Calendar (日历) | |– Camera (相机) | |– CellBroadcastReceiver | |– CertInstaller (在Android中安装数字签名,被调用) |