发布时间 : 星期日 文章杨光福-手机卫士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程序员写的;