Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> 系統備份 >> Android 手機衛士9--短信備份,android9--

Android 手機衛士9--短信備份,android9--

編輯:系統備份

Android 手機衛士9--短信備份,android9--


 

AToolActivity.java

 1 protected void showSmsBackUpDialog() {
 2     //1,創建一個帶進度條的對話框
 3     final ProgressDialog progressDialog = new ProgressDialog(this);
 4     progressDialog.setIcon(R.drawable.ic_launcher);
 5     progressDialog.setTitle("短信備份");
 6     //2,指定進度條的樣式為水平
 7     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 8     //3,展示進度條
 9     progressDialog.show();
10     //4,直接調用備份短信方法即可
11     new Thread(){
12         @Override
13         public void run() {
14             String path = Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"sms74.xml";
15             SmsBackUp.backup(getApplicationContext(), path, new CallBack() {
16                 @Override
17                 public void setProgress(int index) {
18                     //由開發者自己決定,使用對話框還是進度條
19                     progressDialog.setProgress(index);
20                     pb_bar.setProgress(index);
21                 }
22                 
23                 @Override
24                 public void setMax(int max) {
25                     //由開發者自己決定,使用對話框還是進度條
26                     progressDialog.setMax(max);
27                     pb_bar.setMax(max);
28                 }
29             });
30             
31             progressDialog.dismiss();
32         }
33     }.start();
34 }

SmsBackUp.java

  1 package com.itheima.mobilesafe74.engine;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import org.xmlpull.v1.XmlSerializer;
  7 import android.content.Context;
  8 import android.database.Cursor;
  9 import android.net.Uri;
 10 import android.util.Xml;
 11 
 12 public class SmsBackUp {
 13     private static int index = 0;
 14     
 15     //備份短信方法
 16     //ProgressDialog pd    原來的對話框
 17     //現在改為進度條
 18     
 19     //A,傳遞一個進度條所在的對話框
 20     //B,傳遞一個進度條
 21     
 22     public static void backup(Context ctx,String path,CallBack callBack) {
 23         FileOutputStream fos = null;
 24         Cursor cursor = null;
 25         try {
 26             //需要用到的對象上下文環境,備份文件夾路徑,進度條所在的對話框對象用於備份過程中進度的更新
 27             //1,獲取備份短信寫入的文件
 28             File file = new File(path);
 29             //2,獲取內容解析器,獲取短信數據庫中數據
 30             cursor = ctx.getContentResolver().query(Uri.parse("content://sms/"), 
 31                     new String[]{"address","date","type","body"}, null, null, null);
 32             //3,文件相應的輸出流
 33             fos = new FileOutputStream(file);
 34             //4,序列化數據庫中讀取的數據,放置到xml中
 35             XmlSerializer newSerializer = Xml.newSerializer();
 36             //5,給次xml做相應設置
 37             newSerializer.setOutput(fos, "utf-8");
 38             //DTD(xml規范)
 39             newSerializer.startDocument("utf-8", true);
 40             
 41             newSerializer.startTag(null, "smss");
 42             
 43             //6,備份短信總數指定
 44             //A 如果傳遞進來的是對話框,指定對話框進度條的總數
 45             //B    如果傳遞進來的是進度條,指定進度條的總數
 46 //            pd.setMax(cursor.getCount());
 47             
 48             if(callBack!=null){
 49                 callBack.setMax(cursor.getCount());
 50             }
 51             
 52             //7,讀取數據庫中的每一行的數據寫入到xml中
 53             while(cursor.moveToNext()){
 54                 newSerializer.startTag(null, "sms");
 55                 
 56                 newSerializer.startTag(null, "address");
 57                 newSerializer.text(cursor.getString(0));
 58                 newSerializer.endTag(null, "address");
 59                 
 60                 newSerializer.startTag(null, "date");
 61                 newSerializer.text(cursor.getString(1));
 62                 newSerializer.endTag(null, "date");
 63                 
 64                 newSerializer.startTag(null, "type");
 65                 newSerializer.text(cursor.getString(2));
 66                 newSerializer.endTag(null, "type");
 67                 
 68                 newSerializer.startTag(null, "body");
 69                 newSerializer.text(cursor.getString(3));
 70                 newSerializer.endTag(null, "body");
 71                 
 72                 newSerializer.endTag(null, "sms");
 73                 
 74                 //8,每循環一次就需要去讓進度條疊加
 75                 index++;
 76                 Thread.sleep(500);
 77                 //ProgressDialog可以在子線程中更新相應的進度條的改變
 78                 
 79                 //A 如果傳遞進來的是對話框,指定對話框進度條的當前百分比
 80                 //B    如果傳遞進來的是進度條,指定進度條的當前百分比
 81 //                pd.setProgress(index);
 82                 
 83                 if(callBack!=null){
 84                     callBack.setProgress(index);
 85                 }
 86             }
 87             newSerializer.endTag(null, "smss");
 88             newSerializer.endDocument();
 89         } catch (Exception e) {
 90             e.printStackTrace();
 91         }finally{
 92             try {
 93                 if(cursor!=null && fos!=null){
 94                     cursor.close();
 95                     fos.close();
 96                 }
 97             } catch (IOException e) {
 98                 e.printStackTrace();
 99             }
100         }
101     }
102     //回調
103     //1.定義一個接口
104     //2,定義接口中未實現的業務邏輯方法(短信總數設置,備份過程中短信百分比更新)
105     //3.傳遞一個實現了此接口的類的對象(至備份短信的工具類中),接口的實現類,一定實現了上訴兩個為實現方法(就決定了使用對話框,還是進度條)
106     //4.獲取傳遞進來的對象,在合適的地方(設置總數,設置百分比的地方)做方法的調用
107     public interface CallBack{
108         //短信總數設置為實現方法(由自己決定是用    對話框.setMax(max) 還是用    進度條.setMax(max))
109         public void setMax(int max);
110         //備份過程中短信百分比更新(由自己決定是用    對話框.setProgress(max) 還是用    進度條.setProgress(max))
111         public void setProgress(int index);
112     }
113 }
SmsBackUp

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved