短信备份的原理

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

  1. public class SmsBackupUtils {
  2.  
  3. // 回调接口
  4. public interface SmsBackupCallback {
  5. /**
  6. * 短信备份前调用
  7. * @param total 短信的总条数
  8. */
  9. public void beforeSmsbackup(int total);
  10.  
  11. /**
  12. * 短信调用中调用
  13. * @param progress 短信的进度
  14. */
  15. public void progressSmsbackup(int progress);
  16. }
  17.  
  18. /**
  19. * 短信备份的方法,备份到xml文件里,由于xml文件跨平台性强 这是一个耗时操作,应该放在子线程中运行
  20. *
  21. * @param context 上下文
  22. * @param path 备份到哪个路径
  23. * @throws Exception
  24. */
  25. public static void smsBackup(Context context, String path,SmsBackupCallback callBack) throws Exception {
  26.  
  27. // xml的序列化器
  28. XmlSerializer serializer = Xml.newSerializer();
  29. File file = new File(path);
  30. FileOutputStream fos = new FileOutputStream(file);
  31. // 设置參数
  32. serializer.setOutput(fos, "utf-8");
  33. // 開始
  34. serializer.startDocument("utf-8", true);
  35. serializer.startTag(null, "smss");
  36.  
  37. ContentResolver resolver = context.getContentResolver();
  38. Uri uri = Uri.parse("content://sms");// 包括全部短信
  39. Cursor cursor = resolver.query(uri, new String[] { "address", "date",
  40. "type", "body" }, null, null, null);
  41.  
  42. /*dialog.setMax(cursor.getCount());
  43. progressBar1.setMax(cursor.getCount());*/
  44. callBack.beforeSmsbackup(cursor.getCount());
  45. int progress = 0;
  46. while (cursor.moveToNext()) {
  47. serializer.startTag(null, "sms");
  48.  
  49. serializer.startTag(null, "address");
  50. String address = cursor.getString(0);
  51. serializer.text(address);
  52. serializer.endTag(null, "address");
  53.  
  54. serializer.startTag(null, "date");
  55. String date = cursor.getString(1);
  56. serializer.text(date);
  57. serializer.endTag(null, "date");
  58.  
  59. serializer.startTag(null, "type");
  60. String type = cursor.getString(2);
  61. serializer.text(type);
  62. serializer.endTag(null, "type");
  63.  
  64. serializer.startTag(null, "body");
  65. String body = cursor.getString(3);
  66. serializer.text(body);
  67. serializer.endTag(null, "body");
  68.  
  69. serializer.endTag(null, "sms");
  70. progress++;
  71. /*dialog.setProgress(progress);
  72. progressBar1.setProgress(progress);*/
  73. callBack.progressSmsbackup(progress);
  74.  
  75. SystemClock.sleep(1000);
  76. }
  77. cursor.close();
  78.  
  79. serializer.endTag(null, "smss");
  80. serializer.endDocument();
  81. }
  82. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android发展_备份短信的更多相关文章

  1. Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话

    一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...

  2. Android监听系统短信数据库变化-提取短信内容

    由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...

  3. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  4. android: 接收和发送短信

    8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 A ...

  5. android打电话、发短信实现

    打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...

  6. Android下调用收发短信邮件等

    Android下调用收发短信邮件等 1,调web浏览器Uri myBlogUri = Uri.parse("http://xxxxx.com");returnIt = new In ...

  7. android 4.4删除短信

    android 4.4之后非默认的短信应用已经没有办法删除短信了.像以前那样用如下方法是不会没法删除短信的(即使在xml中配置了短信的读写权限),同时也不会有报错或其他提示. public void ...

  8. 向android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  9. 转载:Android自动化测试- 自动获取短信验证码

    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android ...

随机推荐

  1. angular表单知识点

    原文 https://www.jianshu.com/p/c772d143e1fc 大纲 1.对表单的理解 2.模板驱动表单(Template Driven Forms) 3.响应式表单(Reacti ...

  2. [CSS] Target Positional Elements Using *-Of-Type CSS pseudo-classes

    Learn how to target elements based on their position inside of a parent element in relation to its s ...

  3. IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)

    概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...

  4. 设置UIButton的文字显示位置、字体的大小、字体的颜色

    btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlS ...

  5. jquery或js 获取url参数

    <script type="text/javascript"> function getUrlParam(name) { var reg = new RegExp(&q ...

  6. Visual Stdio 环境下使用 GSL (GNU Scientific Library)

    Visual Stdio 环境下使用 GSL (GNU Scientific Library) 经測试.这里的方法不适用于VS2015. * 这篇文章有点过时了.建议从以下网址下载能够在 vs 环境下 ...

  7. Spark源代码阅读笔记之DiskStore

    Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...

  8. [RxJS] Use groupBy in real RxJS applications

    This lesson will show when to apply groupBy in the real world. This RxJS operator is best suited whe ...

  9. js如何实现动态点击改变单元格颜色?

    js如何实现动态点击改变单元格颜色? 一.总结 1.通过table的rows属性,遍历表格所有行,然后通过cells属性,遍历每一行中的单元格. 2.遍历的过程中,动态的为每一个单元格定义单击事件,改 ...

  10. 【u208】修复公路

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数 ...