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()));

 

posted @ 2017-04-08 20:24  OverZeal  阅读(1791)  评论(0编辑  收藏  举报