編輯:系統備份
之前寫過短信備份的小案例,哪裡僅僅是虛擬了幾條短信信息。本篇封裝一個業務類,且直接通過內容提供者,訪問本系統的短信信息,再提供對外接口。如果想要短信備份和短信還原,直接復制這段代碼即可。對於您調用這個類,備份短信或者還原短信的時候,別忘了聲明短信可讀可寫的權限就好了。封裝的代碼如下:
package com.itydl.mobileguard.engine; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import org.json.JSONArray; import org.json.JSONObject; import com.itheima62.mobileguard.utils.EncryptTools; import com.itheima62.mobileguard.utils.JsonStrTools; import com.itheima62.mobileguard.utils.MyConstants; import android.app.Activity; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Environment; import android.os.SystemClock; import android.view.View; import android.widget.ProgressBar; /** * 短信備份和還原的業務類封裝 * * @author Administrator * */ public class SmsEngine { public interface BaikeProgress { /** * 進度的顯示回調 */ void show(); /** * @param max * 回調顯示進度的最大值 */ void setMax(int max); /** * 回調顯示當前進度 * * @param progress */ void setProgress(int progress); /** * 進度完成的回調 */ void end(); } private static class Data { int progress; } /** * 通過子線程來做短信的還原json格式 * * @param context * @param pd * 通過接口回調備份的數據(所有回調方法都在主線程中執行) */ public static void smsResumnJson(final Activity context, final BaikeProgress pd) { final Data data = new Data(); new Thread() { @Override public void run() { // 1,通過內容提供者保存短信 Uri uri = Uri.parse("content://sms"); // 2,獲取備份的短信 try { FileInputStream fis = new FileInputStream(new File( Environment.getExternalStorageDirectory(), "sms.json")); // json數據的合並 StringBuilder jsonSmsStr = new StringBuilder(); // io流的封裝 把字節流封裝成緩沖的字符流 BufferedReader reader = new BufferedReader( new InputStreamReader(fis)); String line = reader.readLine(); while (line != null) { jsonSmsStr.append(line); line = reader.readLine(); } // 解析json數據 JSONObject jsonObj = new JSONObject(jsonSmsStr.toString()); //短信的個數 final int counts = Integer.parseInt(jsonObj.getString("count")); System.out.println(); //設置回調結果的 show和 setMax方法 context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.show(); pd.setMax(counts);// 設置進度條總進度 } }); //循環讀取短信 JSONArray jarray = (JSONArray) jsonObj.get("smses"); for (int i = 0; i < counts ;i++) { data.progress = i; //獲取一條短信 JSONObject smsjson = jarray.getJSONObject(i); ContentValues values = new ContentValues(); values.put("address", smsjson.getString("address")); values.put("body", EncryptTools.decryption( smsjson.getString("body"))); values.put("date", smsjson.getString("date")); values.put("type", smsjson.getString("type")); //往短信數據中加一條記錄 context.getContentResolver().insert(uri, values); //回調結果當前進度 context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.setProgress(data.progress); } }); } reader.close();// 關閉io流 //回調備份完成的結果 context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.end(); } }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } /** * */ /** * 通過子線程來做短信的備份 * * @param context * @param pd * 通過接口回調備份的數據(所有回調方法都在主線程中執行) */ public static void smsBaikeJson(final Activity context, final BaikeProgress pd) { new Thread() { @Override public void run() { // 1,通過內容提供者獲取到短信 Uri uri = Uri.parse("content://sms"); // 獲取電話記錄的聯系人游標 final Cursor cursor = context.getContentResolver().query(uri, new String[] { "address", "date", "body", "type" }, null, null, " _id desc"); // 2,寫到文件中 File file = new File(Environment.getExternalStorageDirectory(), "sms.json"); try { FileOutputStream fos = new FileOutputStream(file); PrintWriter out = new PrintWriter(fos); context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.show(); pd.setMax(cursor.getCount());// 設置進度條總進度 } }); final Data data = new Data(); // 寫根標記 {"count":"10" out.println("{\"count\":\"" + cursor.getCount() + "\""); // ,"smses":[ out.println(",\"smses\":["); while (cursor.moveToNext()) { data.progress++; SystemClock.sleep(100); // 取短信 if (cursor.getPosition() == 0) { out.println("{"); } else { out.println(",{"); } // address 封裝 "address":"hello" out.println("\"address\":\"" + cursor.getString(0) + "\","); // date 封裝 out.println("\"date\":\"" + cursor.getString(1) + "\","); // body 封裝 //對短信加密處理 String mbody = EncryptTools.encrypt(JsonStrTools.changeStr(cursor.getString(2))) ; out.println("\"body\":\"" + mbody + "\","); // type 封裝 out.println("\"type\":\"" + cursor.getString(3) + "\""); out.println("}"); // 封裝成xml標記 context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.setProgress(data.progress); } }); } context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.end(); } }); // 寫根標記結束標記 out.println("]}"); out.flush(); out.close();// 關閉流 cursor.close();// 關閉游標 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } /** * 短信的備份 */ public static void smsBaikeXml(Activity context, final BaikeProgress pd) { // 1,通過內容提供者獲取到短信 Uri uri = Uri.parse("content://sms"); // 獲取電話記錄的聯系人游標 final Cursor cursor = context.getContentResolver().query(uri, new String[] { "address", "date", "body", "type" }, null, null, " _id desc"); // 2,寫到文件中 File file = new File(Environment.getExternalStorageDirectory(), "sms.xml"); try { FileOutputStream fos = new FileOutputStream(file); PrintWriter out = new PrintWriter(fos); context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.show(); pd.setMax(cursor.getCount());// 設置進度條總進度 } }); final Data data = new Data(); // 寫根標記 out.println("<smses count='" + cursor.getCount() + "'>"); while (cursor.moveToNext()) { data.progress++; SystemClock.sleep(100); // 取短信 out.println("<sms>"); // address 封裝 out.println("<address>" + cursor.getString(0) + "</address>"); // date 封裝 out.println("<date>" + cursor.getString(1) + "</date>"); // body 封裝 out.println("<body>" + cursor.getString(2) + "</body>"); // type 封裝 out.println("<type>" + cursor.getString(3) + "</type>"); out.println("</sms>"); // 封裝成xml標記 context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.setProgress(data.progress); } }); } context.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub pd.end(); } }); // 寫根標記結束標記 out.println("</smses>"); out.flush(); out.close();// 關閉流 cursor.close();// 關閉游標 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
基於手機通訊錄的微信,自然有一個功能來保持通訊錄,那麼微信備份通訊錄在哪?微信怎麼備份通訊錄?本文來簡單進行幾個步驟,解決這兩個問題。一、打開微信,點擊最下
聯想樂檬K3手機很是不錯,這手機支持的功能也是比較多的,那麼這手機的要如何去備份數據呢?接下來就一起來看看這詳細介
很多朋友不知道efs是什麼意思,efs是加密文件系統,很多用戶說按照官方教程刷機完以後手機沒有信號,這就是efs信息丟失導致的,所以說這個文件非常重要,刷機前必須要備份,
在用電腦的時候,我們經常備份電腦裡面的重要數據,以免電腦出現問題丟失數據;在用手機時也要養成經常備份的習慣,以免手機出現意外時手機內的重要數據丟失。 步