短信备份(原)

昨天在学习回调的时候,发现了其独特的魅力之处,它将业务代码逻辑和我们的工具类耦合性大大降低了。

应用场景:在实际开发中,经常会随着用户的需求的改变而对对话框的样式进行相应修改,在短信的备份过程中,往往需要给用户显示一个对话框,以提示用户进度。

常见的回调的步骤分为4步:

//1,定义一个接口
//2,定义业务逻辑的抽象2个方法
//3,传递一个实现了第一步接口的实现类的对象进来(实现了未实现的抽象方法(将抽象的逻辑具体话))
//4,在合适的地方去调用实现类对象中,已经实现好的方法

代码如下:

 1 public class SmsUtil {
 2     private static Cursor cursor;
 3     private static FileOutputStream fos;
 4     private static int index = 0;
 5     /**
 6      * @param path    备份到的文件路径
 7      * @param ctx     上下文环境
 8      * @param pd    显示进度条的对话框
 9      */
10     public static void backUp(String path,Context ctx,SmsCallBack callBack) {
11         //1,在指定路径下去创建文件
12         File file = new File(path);
13         try {
14             fos = new FileOutputStream(file);
15
16             //2,准备要备份的数据,内容解析者要上下文环境
17             cursor = ctx.getContentResolver().query(Uri.parse("content://sms/"),
18                     new String[]{"address","date","type","body"},
19                     null, null, null);
20           //设置对话框中进度条100%短信条数
21             if(callBack!=null){
22                 callBack.setMax(cursor.getCount());
23             }
24
25             //3,获取xml的序列化器,做写入xml节点操作
26             XmlSerializer newSerializer = Xml.newSerializer();
27             //向那个文件写入数据
28             newSerializer.setOutput(fos,"utf-8");
29             newSerializer.startDocument("utf-8", true);
30             //设置跟节点(名空间,名称)
31             newSerializer.startTag(null, "smss");
32             while(cursor.moveToNext()){
33                 //在循环遍历过程中,获取每一条短信,四个字段,对应着就是xm中的一个节点
34                 newSerializer.startTag(null, "sms");
35
36                 newSerializer.startTag(null, "address");
37                 newSerializer.text(cursor.getString(cursor.getColumnIndex("address")));
38                 newSerializer.endTag(null, "address");
39
40                 newSerializer.startTag(null, "date");
41                 newSerializer.text(cursor.getString(cursor.getColumnIndex("date")));
42                 newSerializer.endTag(null, "date");
43
44                 newSerializer.startTag(null, "type");
45                 newSerializer.text(cursor.getString(cursor.getColumnIndex("type")));
46                 newSerializer.endTag(null, "type");
47
48                 newSerializer.startTag(null, "body");
49                 newSerializer.text(cursor.getString(cursor.getColumnIndex("body")));
50                 newSerializer.endTag(null, "body");
51
52                 newSerializer.endTag(null, "sms");
53
54                 //叠加进度条百分比
55                 index++;
56
57                     if(callBack!=null){
58                                //设置对话框的最大进度
59                     callBack.setProgress(index);
60                 }
61
62                 Thread.sleep(500);
63             }
64             newSerializer.endTag(null, "smss");
65             newSerializer.endDocument();
66         } catch (Exception e) {
67             e.printStackTrace();
68         }finally{
69             try {
70                 if(cursor!=null && fos!=null){
71                     cursor.close();
72                     fos.close();
73                 }
74             } catch (IOException e) {
75                 e.printStackTrace();
76             }
77         }
78     }
79     public interface SmsCallBack{
80         //1,设置总进度方法
81         public void setMax(int max);
82         //2,设置当前进度的方法
83         public void setProgress(int progress);
84     }
85 }                

这样在调用工具类实现短信备份功能的时候,就可以很方便的自定义对话框样式,而不需要再去修改业务逻辑。

	SmsUtil.backup(sdPath, getApplicationContext(),new SmsCallBack() {
			public void setProgress(int progress) {

			}

			public void setMax(int max) {

			}
	、});

  

时间: 2024-10-26 19:04:51

短信备份(原)的相关文章

手机卫士07_自定义吐司_桌面小火箭_短信备份_接口和回调_应用程序信息,

1,自定义吐司显示风格 ①创建一个布局文件(代码注册的View看不出效果,所以还是定义布局文件比较好) 这里的背景是.9图片会根据包裹内容来拉伸 ②在显示自定义吐司的界面,显示的吐司通过View.inflate()创建 ③在设置中心增加一条修改归属地显示风格. {"半透明","活力橙","卫士蓝","金属灰","苹果绿"}; 点击之后弹出一个单选对话框. builder.setSingleChoiceIte

黑马程序员金山卫士实战短信备份2集

黑马程序员 大师班 安卓项目实战-分分钟搞定 金山卫士实战短信备份2集 有很多用户们在使用智能手机的过程中有及时清理手机,删除电话记录以及短信的习惯,以此来保证手机的纯净,但是有时我们会有一些重要的信息想要保存下来,这时该怎么办呢?备份就是一个很好的办法... 课程包含 短信备份.代码优化 下载地址:http://www.feixueteam.net/thread-947-1-1.html

Android开发短信备份小例子

主要是使用内容提供者ContentProvider #1.在activity_main.xml布局文件中添加写sdcard权限,并添加读短信的权限 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par

Android开发遇到短信备份失败

今天做了一个有关ContentProvider的短信备份的小案例,遇到短信备份失败,费了一番周折后终于找到了问题所在 该案例是将短信写到一个xml文件然后保存在手机存储中实现短信的备份功能,关键实现代码如下 public class SmsUtils { public static void backUpSms(List<SmsInfo> smsInfos, Context context) { try { XmlSerializer serializer = Xml.newSerialize

Android简易实战教程--第八话《短信备份~一》

各种手机助手里面都包含了短信备份这一项.短信的本分主要包含四项:内容body.事件date.方式type.号码address. 短信备份~一.使用一种很笨的方式来保存短信到xml文件中,而且保存在外部存储.后续会有:短信备份~二(xml序列化器):短信备份~三(内容提供者获取短信xml备份):短信备份~四(json方式备份数据库短信).备份的方式越来越高效,比较不同存储方式. 很显然,初次介绍短信备份,以一种简单笨拙的方式,且不涉及内容提供者,虚拟10条短信. 短信的保存,要以对象的形式保存.因

短信备份与还原工具类

短信备份与还原工具类 package com.flyou.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.Xml

【android基础篇】利用内容提供者实现短信备份

I,准备工作 系统存储短信内容的目录为:/dada/dada/com.android.providers.telephony/databases/mmssms.db,我们找到对应的数据库文件. 我们可以发现该文件对于第三方而言,是不可读不可写的,这里则必须要使用内容提供者. 问题就来了:我不知道主机名,也就无法作为中间人去找证监会打探消息.其实,完全没有关系,我们可以翻阅安卓的源代码: \packages\providers\TelephonyProvider的清单文件,因为主机名都配置在清单文

Android之——短信的备份与还原

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 目前,Android手机中的一些软件可以实现手机短信的备份与还原操作.这篇博文就是要向大家介绍如何实现Android短信的备份与还原操作.好了,相信大家对这些实用的功能还是比较感兴趣的,不多说了,我们直接进入主题吧. 一.原理 我的实现原理很简单,界面上放置几个TextView列表,其中两项为"短信的备份"和"短信的还原",点击&quo

短信的备份

package com.example.sms; import java.io.File; import java.io.FileOutputStream; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cur