杨光福-手机卫士day7 联系客服

发布时间 : 星期日 文章杨光福-手机卫士day7更新完毕开始阅读bfafa89a04a1b0717fd5ddad

手机卫士

Day7

61_ 短信备份的原理_30

1、查看金山手机卫士的短信备份功能。

短信备份的原理,是用内容提供者读取短信,然后保存。

2、在高级工具AtoolsActivity布局文件里添加短信备份,并处理点击事件smsBackup

3、在com.itheima.mobilesafe.utils工具包目录创建工具类SmsTools用于写短信备份代码

A:短信备份方法backup(Context context,String path)

B:导出短信数据库保存的路径

data/data/com.android.provider.telephony/databases/mmssms.db address 短信收件人发件人地址 date 短信接收的时间

type 1 发进来短信 2 发出去短信 read 1已读短信 0 未读短信

C:参照源代码Uri路径怎么写

//备份所有的短信,未读的、已读的等待

Uri uri = Uri.parse(\);

new

读取短信代码: Cursor cursor = resolver.query(uri, String[]{\,\date\,\,\}, null, null, null); while(cursor.moveToNext()){

String address = cursor.getString(0); String date = cursor.getString(1); String type = cursor.getString(2); String body = cursor.getString(3); }

把短信生成XML文件,得到xml的序列化器,设置参数 XmlSerializer serializer = Xml.newSerializer();

File file = new File(path);

FileOutputStream os = new FileOutputStream(file);

//设置序列化器的参数

serializer.setOutput(os, \);

设置文档的开头和结束

serializer.startDocument(\, true);

serializer.endDocument();

设置文档根节点smss开始和结束

serializer.startTag(null, \); serializer.endTag(\, \);

设置sms里面具体内容,在while循环里面做

serializer.startTag(null, \

serializer.startTag(null, \); String address = cursor.getString(0); serializer.text(address);

serializer.endTag(null, \);

serializer.endTag(null, \

4、使用写好的短信备份工具 判断sdcard是否存在

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),\ckup.xml\);

try {

SmsTools.backup(this, file.toString());

Toast.makeText(this, \短信备份成功\, 0).show();

} catch (Exception e) {

// TODO Auto-generated catch block e.printStackTrace();

Toast.makeText(this, \短信备份失败\, 0).show(); } }else{

Toast.makeText(this, \不可用\, 0).show(); return; }

5、添加读短信的权限

知识拓展 生成excel表 poc

http://blog.csdn.net/zhy_cheng/article/details/10286563

62_接口和回调_26

1、当前备份短信代码,是写在主线程,如果短信很多的话会出现ANR异常。

2、把短信备份代码移植到子线程;

new Thread(){

public void run() { try {

SmsTools.backup(AtoolsActivity.this, file.toString()); } catch (Exception e) { e.printStackTrace(); } };

}.start();

3、模拟短信备份耗时,在没一个While循环里休眠1000毫秒

4、创建一个对话框ProgressDialog用户等待备份时间,和消掉对话框 显示对话框

final ProgressDialog dialog = new ProgressDialog(this);

dialog.setMessage(\请稍等,正在备份钟...\); dialog.show();

备份完后在子线程消掉对话框? dialog.dismiss(); 运行演示,看效果;

5、做成是有加载进度的对话框

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 但是我们需要知道总条数和当前备份了多少条;

运行演示看效果

在短信备份方法增加参数ProgressDialog dialog参数 在备份方法里设置短信总条数 //设置总条数

dialog.setMax(cursor.getCount());

定义进度 //当前进度

int progress = 0;

在while循环里跟新进度

progress ++;

dialog.setProgress(progress);

考虑在工作中真实的情况:

备份短信界面 UI 是由A程序员写的; 备份短信的功能工具类 是用B程序员写的;