短信备份(原)
昨天在學(xué)習(xí)回調(diào)的時候,發(fā)現(xiàn)了其獨特的魅力之處,它將業(yè)務(wù)代碼邏輯和我們的工具類耦合性大大降低了。
應(yīng)用場景:在實際開發(fā)中,經(jīng)常會隨著用戶的需求的改變而對對話框的樣式進行相應(yīng)修改,在短信的備份過程中,往往需要給用戶顯示一個對話框,以提示用戶進度。
常見的回調(diào)的步驟分為4步:
//1,定義一個接口
//2,定義業(yè)務(wù)邏輯的抽象2個方法
//3,傳遞一個實現(xiàn)了第一步接口的實現(xiàn)類的對象進來(實現(xiàn)了未實現(xiàn)的抽象方法(將抽象的邏輯具體話))
//4,在合適的地方去調(diào)用實現(xiàn)類對象中,已經(jīng)實現(xiàn)好的方法
代碼如下:
1 public class SmsUtil { 2 private static Cursor cursor; 3 private static FileOutputStream fos; 4 private static int index = 0; 5 /** 6 * @param path 備份到的文件路徑 7 * @param ctx 上下文環(huán)境 8 * @param pd 顯示進度條的對話框 9 */ 10 public static void backUp(String path,Context ctx,SmsCallBack callBack) { 11 //1,在指定路徑下去創(chuàng)建文件 12 File file = new File(path); 13 try { 14 fos = new FileOutputStream(file); 15 16 //2,準(zhǔn)備要備份的數(shù)據(jù),內(nèi)容解析者要上下文環(huán)境 17 cursor = ctx.getContentResolver().query(Uri.parse("content://sms/"), 18 new String[]{"address","date","type","body"}, 19 null, null, null); 20 //設(shè)置對話框中進度條100%短信條數(shù) 21 if(callBack!=null){ 22 callBack.setMax(cursor.getCount()); 23 } 24 25 //3,獲取xml的序列化器,做寫入xml節(jié)點操作 26 XmlSerializer newSerializer = Xml.newSerializer(); 27 //向那個文件寫入數(shù)據(jù) 28 newSerializer.setOutput(fos,"utf-8"); 29 newSerializer.startDocument("utf-8", true); 30 //設(shè)置跟節(jié)點(名空間,名稱) 31 newSerializer.startTag(null, "smss"); 32 while(cursor.moveToNext()){ 33 //在循環(huán)遍歷過程中,獲取每一條短信,四個字段,對應(yīng)著就是xm中的一個節(jié)點 34 newSerializer.startTag(null, "sms"); 35 36 newSerializer.startTag(null, "address"); 37 newSerializer.text(cursor.getString(cursor.getColumnIndex("address"))); 38 newSerializer.endTag(null, "address"); 39 40 newSerializer.startTag(null, "date"); 41 newSerializer.text(cursor.getString(cursor.getColumnIndex("date"))); 42 newSerializer.endTag(null, "date"); 43 44 newSerializer.startTag(null, "type"); 45 newSerializer.text(cursor.getString(cursor.getColumnIndex("type"))); 46 newSerializer.endTag(null, "type"); 47 48 newSerializer.startTag(null, "body"); 49 newSerializer.text(cursor.getString(cursor.getColumnIndex("body"))); 50 newSerializer.endTag(null, "body"); 51 52 newSerializer.endTag(null, "sms"); 53 54 //疊加進度條百分比 55 index++; 56 57 if(callBack!=null){ 58 //設(shè)置對話框的最大進度 59 callBack.setProgress(index); 60 } 61 62 Thread.sleep(500); 63 } 64 newSerializer.endTag(null, "smss"); 65 newSerializer.endDocument(); 66 } catch (Exception e) { 67 e.printStackTrace(); 68 }finally{ 69 try { 70 if(cursor!=null && fos!=null){ 71 cursor.close(); 72 fos.close(); 73 } 74 } catch (IOException e) { 75 e.printStackTrace(); 76 } 77 } 78 } 79 public interface SmsCallBack{ 80 //1,設(shè)置總進度方法 81 public void setMax(int max); 82 //2,設(shè)置當(dāng)前進度的方法 83 public void setProgress(int progress); 84 } 85 } View Code這樣在調(diào)用工具類實現(xiàn)短信備份功能的時候,就可以很方便的自定義對話框樣式,而不需要再去修改業(yè)務(wù)邏輯。
SmsUtil.backup(sdPath, getApplicationContext(),new SmsCallBack() {public void setProgress(int progress) {}public void setMax(int max) {}、});
轉(zhuǎn)載于:https://www.cnblogs.com/adv-qbj/p/4719794.html
總結(jié)
- 上一篇: 求方程解问题
- 下一篇: import-module的注意事项与N