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

 更新时间:2021年08月19日 16:11:21   作者:C_L  
这篇文章主要介绍了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); 

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

相关文章

  • Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法

    Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法

    这篇文章主要介绍了Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法,需要的朋友可以参考下
    2018-01-01
  • DataBinding onClick的七种点击方式

    DataBinding onClick的七种点击方式

    这篇文章主要给大家介绍了关于DataBinding onClick的七种点击方式,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Android TextView实现带链接文字事件监听的三种常用方式示例

    Android TextView实现带链接文字事件监听的三种常用方式示例

    这篇文章主要介绍了Android TextView实现带链接文字事件监听的方法,结合实例形式分析了链接跳转、setMovementMethod及布局属性设置三种常用的实现方式,需要的朋友可以参考下
    2017-08-08
  • android实现打地鼠游戏

    android实现打地鼠游戏

    这篇文章主要为大家详细介绍了android实现打地鼠游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 一款适用于Android平台的俄罗斯方块

    一款适用于Android平台的俄罗斯方块

    这篇文章主要为大家详细介绍了一款适用于Android平台的俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法

    Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法

    这篇文章主要介绍了Android框架Volley之利用Imageloader和NetWorkImageView加载图片的实现方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Android Coil对比Glide深入分析探究

    Android Coil对比Glide深入分析探究

    这篇文章主要介绍了Android Coil对比Glide,Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库
    2023-02-02
  • 使用VideoView播放App中的资源文件

    使用VideoView播放App中的资源文件

    这篇文章主要介绍了使用VideoView播放App中的资源文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android开发实现拍照功能的方法实例解析

    Android开发实现拍照功能的方法实例解析

    这篇文章主要介绍了Android开发实现拍照功能的方法,结合实例形式较为详细的分析了Android拍照功能的具体实现步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Android Git submodule详解用法示例

    Android Git submodule详解用法示例

    项目中经常会使用到第三方的 git 库, 将三方库整合到项目中最简单的办法就是复制粘贴, 但是如果这个库升级了一个很酷炫的功能, 你要怎么整合进来呢?(其实就是 git 版的包管理器)这就是本次要介绍的 git-submodule 操作, 直接把第三方的版本库合并到自己的库中
    2021-11-11

最新评论