Android实现支持进度条显示的短信备份工具类

使用内容提供者读取短信内容,写入XML文件,进度条ProgressDialog更新备份进度。
新知识点:子线程如何在在不使用Handler的情况下更新UI

/**
 *   进行短信备份的工具类,支持进度条显示
 * @author lian
 *
 */ 

public class SmsBackupUtils {
  private static class Data{
    int progress;
  } 

  /**
   *
   * @param context
   *   调用此工具类的Activity
   * @param pd
   *   显示备份进度的进度条
   */
  public static void smsBackup(Activity context,final ProgressDialog pd){
    Uri uri = Uri.parse("content://sms/");
    ContentResolver cr = context.getContentResolver(); 

    //取出短信
    final Cursor cursor = cr.query(uri, new String[]{"address","date","body","type"}, null, null, null); 

    final int count = cursor.getCount(); 

    final Data data = new Data();
    data.progress = 0; 

    //存储路径
    File file = new File(Environment.getExternalStorageDirectory(), "sms.xml");
    try {
      FileOutputStream fos = new FileOutputStream(file);
      PrintWriter pw = new PrintWriter(fos); 

      //按照XML格式进行写入
      pw.println("<smses count='" + cursor.getCount() +"'>"); 

      //在主线程中更新UI
      context.runOnUiThread(new Runnable() { 

        @Override
        public void run() {
          // TODO Auto-generated method stub
          pd.setMax(count);
          pd.show();
        }
      }); 

      //写入XML文件
      while(cursor.moveToNext()){
        data.progress ++;
        String address = cursor.getString(0);
        String date = cursor.getString(1);
        String body = cursor.getString(2);
        String type = cursor.getString(3); 

        //SystemClock.sleep(150);
        pw.println("<sms>");
        pw.println("<address>"+ address +"</address>");
        pw.println("<date>"+ date +"</date>");
        pw.println("<body>"+ body +"</body>");
        pw.println("<type>"+ type +"</type>");
        pw.println("</sms>"); 

        context.runOnUiThread(new Runnable() { 

          @Override
          public void run() {
            // TODO Auto-generated method stub
            pd.setProgress(data.progress);
          }
        }); 

      }
      pw.println("</smses>");
      pw.flush();
      pw.close();
      cursor.close();
      //备份完成,关闭进度条
      context.runOnUiThread(new Runnable() {
        @Override
        public void run() {
          // TODO Auto-generated method stub
          pd.dismiss();
        }
      });
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 

  }
}

调用

pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

SmsBackupUtils.smsBackup(SuperToolActivity.this, pd); 

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Android实现短信验证码获取自动填写功能(详细版)

    现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首先,需要要在manifest中注册接收和读取短信的权限: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_

  • android教程之intent的action属性使用示例(intent发短信)

    Action :规定了Intent要完成的动作,是一个字符串常量.使用setAction()来设置Action属性,使用getAction()来获得Action属性.既可以使用系统内置的Action,也可以自己定义.系统自定义的action,如ACTION_VIEW, ACTION_EDIT, ACTION_MAIN等等. 1.自定义Action 在"目的Activity"的AndroidManifest.xml中指定action常量. 复制代码 代码如下: <activity

  • Android使用MobSDK短信验证

    短信注册和短信验证已经是家常便饭了,所以当然要学习如何使用SDK啦 MobSDK可以免费发短信,当然就用它啦 http://www.mob.com 1.首先下载sdk 2.在项目新建一个叫lib的文件夹把4个东西放进去 3.在app的build.gradule添加如下代码 repositories{ flatDir{ dirs 'lib' //就是你放aar的目录地址 } } dependencies { //....... //其他依赖包 compile name: 'SMSSDK-2.1.0

  • Android手机号注册、绑定手机号获取短信验证码实例

    本文写了一个常见的功能--手机app中注册或绑定手机号的获取验证码的功能,也就是短信验证功能 具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收到验证短信,填入验证码后点击注册按钮,如果验证正确就可以跳转到另外一个界面 1.首先大家需要在mob官网注册一个账号,mob是一个免费的短信验证平台 2.在mob.com后台创建应用 3.下载对应的sdk 4.将sdk作为一个library导入到你的项目中 5.现在就可以在你的项目中编写代码使用mob提供的这个功能了 具体代码如下:

  • Android获取和读取短信验证码的实现方法

    现如今,验证码在Android的客户端还是非常普遍的.通过手机账号和验证码直接去注册应用账户的信息.很多应用都以这种方式来完成注册.简单的介绍一下吧. Android获取短信验证码还是比较简单的,通过Mob官网提供的ShareSDK,调用其中内部的方法,就可以获取到短信的验证码了.提供一下Mob的官网地址.http://www.mob.com/#/在官网上注册相关的信息之后,下载相关的jar包和.so文件就可以实现获取短信验证码了(2.0之前的版本都需要下载jar包和 .so文件,而现在的2.2

  • Android开发工程中集成mob短信验证码功能的方法

    一.前言 现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在是有点奢侈,很好的是mob为我们提供了免费的短信验证码服务功能,我不是打广告,的确觉得这项服务很不错.那么下面就简单讲一下如何在自己的工程里集成mob的短信功能,其实整个流程并不复杂,只是个人觉得mob的官方文档有点小乱,官方Demo也有点小复杂,同时有一些细节地方容易被忽视,也会导致一些问题. PS:太喜欢mob的logo了. 二.实现过程 本篇只涉及A

  • Android如何通过手机自动获取短信验证码

    本文实例为大家分享了Android实现手机自动获取短信验证码功能,供大家参考,具体内容如下 1.短信监听广播 2.读取短信内容 3.截取短信内容[可以 reg截取] 4.填写至相应控件 PS:DevStore测试没有获取到验证码 源码片段 public class MainActivity extends Activity { private BroadcastReceiver smsReceiver; private IntentFilter filter2; private Handler

  • Android实战教程第九篇之短信高效备份

    Android短信高效备份这篇文章,承接上一篇.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain; public class Message { private String body; private String date; private String address; private String type; public String getBody() { ret

  • Android实现短信验证码自动拦截读取功能

    知识准备:  1.观察者模式的理解[文章稍后来到~~]  2.Android的Cursor使用[Android基础]  3.正则表达式使用[Java基础]  4.Handler使用[Android基础] 代码整理: MainActivity.java import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.suppo

  • Android接收和发送短信的实现代码

    Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver android:name=".smsReceiver" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </in

随机推荐