AToolActivity.java SmsBackUp.java 1 package com.itheima.mobilesafe74.engine; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java ...
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