备份短信与回调
来源:互联网 发布:网络推广职责 编辑:程序博客网 时间:2024/06/16 18:44
1.找到短信所在数据库对应的表
data/data/com.android.providers.telephony/databases/mmssms.db/sms表
data/data/com.android.providers.telephony/databases/mmssms.db/sms表
获取其相应的四个字段(address 电话号码 date 时间 type:接收,发送 body:短信内容)
2.访问数据库方式,系统数据库有提供内容提供者(),通过内容解析器解析,Uri地址(源码)
3.访问数据库中sms表的Uri地址content://sms/
4.将获取短信的查询过程封装到单独的一个引擎类中去SmsBackUp
package com.example.phone.engine;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.xmlpull.v1.XmlSerializer;import android.app.ProgressDialog;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.SystemClock;import android.util.Xml;public class SmsBackup {public static void backup(Context context, String path, Callback callback) {Cursor cursor = null;FileOutputStream fos = null;try {int index = 0;cursor = context.getContentResolver().query(Uri.parse("content://sms"),new String[] { "address", "date", "type", "body" }, null, null, null);if(callback != null) {callback.setMax(cursor.getCount());}File file = new File(path);fos = new FileOutputStream(file);XmlSerializer serializer = Xml.newSerializer();serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true);serializer.startTag(null, "smss");while(cursor.moveToNext()) {serializer.startTag(null, "sms");serializer.startTag(null, "address");serializer.text(cursor.getString(0));serializer.endTag(null, "address");serializer.startTag(null, "date");serializer.text(cursor.getString(1));serializer.endTag(null, "date");serializer.startTag(null, "type");serializer.text(cursor.getString(2));serializer.endTag(null, "type");serializer.startTag(null, "body");serializer.text(cursor.getString(3));serializer.endTag(null, "body");serializer.endTag(null, "sms");index++;if(callback != null) {callback.setProgress(index);}SystemClock.sleep(100);}serializer.endTag(null, "smss");serializer.endDocument();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {cursor.close();fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public interface Callback {public void setMax(int max);public void setProgress(int index);}}在短信备份过程中显示一个对话框或进度条,因为备份方法中要更新进度而且要同时满足对话框和进度条的更新,所以用回调。
1.定义一个接口
2,定义接口中未实现的业务逻辑方法
3.传递一个实现了此接口的类的对象,一定实现了上诉接口未实现方法
4.获取传递进来的对象,在合适的地方,做方法的调用
如上代码,创建了一个接口callback,其中声明了更新进度需要的方法,并在备份方法中传入该接口的实例,使用该实例来调用方法。
而在传入该参数的方法时则需要重写接口里的方法,即对话框和进度条的方法。
SmsBackup.backup(getApplication(), path , new Callback() {@Overridepublic void setProgress(int index) {// TODO Auto-generated method stubprogressDialog.setProgress(index);}@Overridepublic void setMax(int max) {// TODO Auto-generated method stubprogressDialog.setMax(max);}});
阅读全文
0 0
- 备份短信与回调
- 短信备份与还原
- 短信备份与恢复
- 短信备份与还原
- android短信备份与还原
- 短信备份与还原工具类SmsUtils
- 短信备份
- 短信备份
- 短信备份
- 短信备份
- 短信备份
- 短信备份
- PAIP.手机sms短信,联系人的同步与备份.txt
- andori 短信的备份与恢复(导入导出)
- 未越狱iphone与 Android短信备份迁移攻略
- Android之——短信的备份与还原
- 短信备份与还原&AsyncTask&程序锁(Fragment)
- 备份短信和添加短信
- ansible安装遇到"AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'"的问题
- git基本使用
- php生成 文字水印 图片水印
- 阻塞与非阻塞的区别
- Retry重试机制
- 备份短信与回调
- 密码学复习笔记3【分组密码/AES、ECB、CBC、CFB、OFB、CTR】
- 深度学习在股票市场的应用
- C语言scanf函数用法详细解释!!!
- 内网通无限积分-------------
- 自定义View画圆 跟踪进度条 及改变颜色
- C语言time.h中clock()函数的使用
- win10下载备忘录
- 工作第一周。时间格式String格式转Date