黑马程序员之手机卫士第九天

##day09##
- 清除来电记录

代码挂断电话后,被挂断的号码仍然会进入通话记录中, 我们需要将这种记录删除.

查看数据库contacts2中的表calls

private void deleteCallLog(String number) {
getContentResolver().delete(Uri.parse("content://call_log/calls"),
"number=?", new String[] {number});
}

注意加权限:

- 通过内容观察者,解决通话记录删除失败的问题

系统在往通话记录的数据库中插入数据时是异步逻辑,所以当数据库还没来得及添加电话日志时,我们就执行了删除日志的操作,从而导致删除失败,为了避免这个问题,可以监听数据库变化,当数据库发生变化后,我们才执行删除操作,从而解决这个问题

class MyContentObserver extends ContentObserver {
private String incomingNumber;
public MyContentObserver(Handler handler, String incomingNumber) {
super(handler);
this.incomingNumber = incomingNumber;
}
@Override
public void onChange(boolean selfChange) {
System.out.println("call log changed...");
//删除日志
deleteCallLog(incomingNumber);
//删除完日志后,注销内容观察者
getContentResolver().unregisterContentObserver(mObserver);
}
}

------------------------------

//监听到来电时,注册内容观察者
mObserver = new MyContentObserver(new Handler(),
incomingNumber);
//注册内容观察者
getContentResolver().registerContentObserver(
Uri.parse("content://call_log/calls"), true,
mObserver);
------------------------------

注意:
补充Android2.3模拟器上需要多加权限
- 短信备份

- 查看短信数据库

data/data/com.android.provider.telephony/databases/mmssms.db
address 短信收件人发件人地址
date 短信接收的时间
type 1 发进来短信 2 发出去短信
read 1 已读短信 0 未读短信
body 短信内容

- 读取短信数据库内容

查看系统源码,找到uri地址:packages\provider\platform_packages_providers_telephonyprovider-master

Uri uri = Uri.parse("content://sms/");// 所有短信
Cursor cursor = ctx.getContentResolver().query(uri,
new String[] { "address", "date", "type", "body" }, null, null,
null);

遍历cursor,获取短信信息

注意权限:
       

- 将短信内容序列化为xml文件

sms.xml
   
5556
   10499949433
   1
wos shi haoren
   
13512345678
   1049994889433
   2
hell world hei ma

------------------------------

XmlSerializer serializer = Xml.newSerializer();// 初始化xml序列化工具
serializer.setOutput(new FileOutputStream(output), "utf-8");//设置输出流
serializer.startDocument("utf-8", null);// 生成xml顶栏描述语句

黑马程序员之手机卫士第九天

黑马程序员之手机卫士第九天

黑马程序员之手机卫士第九天

你可能感兴趣的:(黑马程序员之手机卫士第九天)