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

时间:2023-02-19 22:04:24
##day09##- 清除来电记录
代码挂断电话后,被挂断的号码仍然会进入通话记录中,我们需要将这种记录删除.
查看数据库contacts2中的表calls
private void deleteCallLog(Stringnumber) {getContentResolver().delete(Uri.parse("content://call_log/calls"),"number=?", new String[]{number});}
注意加权限:
- 通过内容观察者,解决通话记录删除失败的问题
系统在往通话记录的数据库中插入数据时是异步逻辑,所以当数据库还没来得及添加电话日志时,我们就执行了删除日志的操作,从而导致删除失败,为了避免这个问题,可以监听数据库变化,当数据库发生变化后,我们才执行删除操作,从而解决这个问题
class MyContentObserver extendsContentObserver {private String incomingNumber;public MyContentObserver(Handlerhandler, String incomingNumber) {super(handler);this.incomingNumber =incomingNumber;}@Overridepublic void onChange(booleanselfChange) {System.out.println("call logchanged...");//删除日志deleteCallLog(incomingNumber);//删除完日志后,注销内容观察者getContentResolver().unregisterContentObserver(mObserver);}}
------------------------------
//监听到来电时,注册内容观察者mObserver = newMyContentObserver(new Handler(),incomingNumber);//注册内容观察者getContentResolver().registerContentObserver(Uri.parse("content://call_log/calls"), true,mObserver);------------------------------
注意:补充Android2.3模拟器上需要多加权限- 短信备份
- 查看短信数据库
data/data/com.android.provider.telephony/databases/mmssms.dbaddress 短信收件人发件人地址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  1wos shi haoren  
13512345678
  1049994889433  2hell world hei ma
------------------------------
XmlSerializer serializer =Xml.newSerializer();// 初始化xml序列化工具serializer.setOutput(newFileOutputStream(output), "utf-8");//设置输出流serializer.startDocument("utf-8",null);// 生成xml顶栏描述语句
黑马程序员之手机卫士第九天

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

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