欢迎来到天天文库
浏览记录
ID:1218704
大小:43.00 KB
页数:8页
时间:2017-11-08
《android通话记录备份实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Android通话记录备份实现[复制链接](一)前言Android默认提供了联系人备份到sd卡的功能(代码在com.android.vcard包里面),我们可以把联系人导出成.vcf文件存在sd卡中;如果换手机了,我们又可以把联系人从sd卡文件中导入进来。那么,通话记录我们也能不能做出类似的功能呢?答案是肯定的!(二)导出通话记录既然是备份通话记录,那就肯定包括导出和导入的功能,这里我们先讲导出通话记录。1.根据通话记录导出的规范,导出的文件一般以.vcl后缀结尾,中间的内容是BEGIN:VCALLSLOT:0//卡槽号0:单卡
2、手机1:双卡手机卡槽12:双卡手机卡槽2TYPE:1//电话类型1:接入电话,2:呼出电话3:未接电话Date:2013/02/1214:11:12GMT//来电或者去点的时间备份时以GMT时间记录,恢复时显示手机时区对应时间NUMBER:+86134xxxxx//对方号码DURATION:5//持续时间,秒数END:VCALL那么这里就是一条通话记录的存储格式了,以BEGIN:VCALL开始END:VCALL结束。//表示的是该字段的含义,只是为了让大家理解,不会导入到实际的文件中去。那么我们来看实际怎么导出的。2.查询通话记
3、录列表ok..既然是保存通话记录,那么首先要查询通话记录Android里面提供了一个CallLogProvider来满足大家的这个需求,它在系统中配置的名字是“call_log”,所以大家只要提供一个这样的Uri就可以查询了,比如:代码:Uriuri=Uri.parse("context://call_log/calls");Cursorc=mContext.getContentResolver().query(uri,xxx,xxx);这样就可以查询出所有的通话记录,得到游标。。3.从游标中剥离出想要保存的字段和数据,写入文件
4、既然找到了游标,那么接下来就是从游标中找到我们想要写入文件的字段数据,比如,基本如下:代码:protectedObjectdoInBackground(Object...params){//后台异步Task,后台查询数据和写入文件,每导出一条记录,更新一次进度条super.doInBackground(params);Stringpath=(String)params[0];UriqueryUri=Uri.parse("content://call_log/calls");CursorqueryedCursor=mContext
5、.getContentResolver().query(queryUri,null,null,null,null);if(queryedCursor==null
6、
7、queryedCursor.getCount()==0){return-1;}Object[]message=newObject[1];message[0]=queryedCursor.getCount();publishProgress(message);StringBuildersb=newStringBuilder();OutputStreamoutputStr
8、eam=null;Writerwriter=null;try{outputStream=newFileOutputStream(path);writer=newBufferedWriter(newOutputStreamWriter(outputStream));for(queryedCursor.moveToFirst();!queryedCursor.isAfterLast();queryedCursor.moveToNext()){if(mCancel){break;}sb.setLength(0);sb.append("
9、BEGIN:VCALL").append("");intsubId=queryedCursor.getInt(queryedCursor.getColumnIndex("sub_id"));intcallType=queryedCursor.getInt(queryedCursor.getColumnIndex("type"));//incall/outcall/missedcalllongdate=queryedCursor.getLong(queryedCursor.getColumnIndex("date"));Str
10、inggmtData=getGTMDatetimeString(date);Stringnumber=queryedCursor.getString(queryedCursor.getColumnIndex("formatted_number"));String
此文档下载收益归作者所有