SmsUtils

import java.io.File;
import java.io.FileOutputStream;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;


import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.os.SystemClock;
import android.util.Xml;
import android.widget.Toast;


public class SmsUtils {



/**

* @param ctx
* @param backupListener 備份短信的回調接口
*/
public static void backupSms(Context ctx,OnBackupListener backupListener){
// 判斷是否有SD卡,以及,SD卡空間是否足夠

if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
// 沒有SD卡
Toast.makeText(ctx, "沒有SD卡,無法備份短信", 0).show();
return ;
}

// 判斷SD卡空間是否夠10M

File sdFile = Environment.getExternalStorageDirectory();
if(sdFile.getFreeSpace() < 10*1024*1024){
Toast.makeText(ctx, "SD卡空間不足,無法備份短信", 0).show();
return ;
}


try {


Uri uri = Uri.parse("content://sms");
String[] projection = new String[] { "address", "date", "type","body" };
Cursor cursor = ctx.getContentResolver().query(uri, projection,null, null, null);


// 設置總數
// proDlg.setMax(cursor.getCount()); // 
// progBar.setMax(cursor.getCount()); // 
if(backupListener!=null){
backupListener.onGetTotalCount(cursor.getCount());
}


XmlSerializer serializer = Xml.newSerializer();
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/backup_sms_z10.xml";
serializer.setOutput(new FileOutputStream(path), "UTF-8");


serializer.startDocument("UTF-8", true); // true 說明是一個單獨的文件
serializer.startTag(null, "smss");// <smss>
serializer.attribute(null, "size", ""+cursor.getCount()); //  <smss size = "20">

int currProg = 0; //  當前進度

// 查詢數據庫,返回的cursor 指向,第一行的上一行
while (cursor.moveToNext()) {
String address = cursor.getString(0); // 電話號碼
String date = cursor.getString(1); // 日期
String type = cursor.getString(2); // 類型,1收到的,2是發送的
String body = cursor.getString(3); // 短信內容


serializer.startTag(null, "sms");
// <address>234234</address>
serializer.startTag(null, "address");
serializer.text(address);
serializer.endTag(null, "address");

// <data>12312333543</data>
serializer.startTag(null, "date");
serializer.text(date);
serializer.endTag(null, "date");

serializer.startTag(null, "type");
serializer.text(type);
serializer.endTag(null, "type");

serializer.startTag(null, "body");
serializer.text(body);
serializer.endTag(null, "body");

serializer.endTag(null, "sms");


SystemClock.sleep(100); // 休眠一會兒,模擬短信比較多,比較費時的情況

// 設置更新的進度
currProg++;
// proDlg.setProgress(currProg);
// progBar.setProgress(currProg);
if(backupListener!=null){
backupListener.onProgressChanged(currProg);
}

}

serializer.endTag(null, "smss");// </smss>
serializer.endDocument();

serializer.flush();


} catch (Exception e) {
e.printStackTrace();
}
}


/**
* 聲明一個接口,當備份進度發生改變時的回調接口
* @author leo
*/
public interface OnBackupListener{

/**
*  當獲得短信總數時,回調此方法
*  @param totalCount 短信總數
*/
void onGetTotalCount(int totalCount);

/**
* 當備份進度發生變化時,回調此方法
* @param currProg 當前進度
*/
void onProgressChanged(int currProg);

}




/**

* @param ctx
*/
public static void restoreSms(Context ctx) {

// 讀取XML文件並解析 ,
XmlPullParser parser = Xml.newPullParser();
// parser.setInput(fileInputStream, "UTF-8");
try {
int eventType = parser.getEventType();

while(eventType!=XmlPullParser.END_DOCUMENT){
// switch 判斷看是開始,還是結束
// 獲得一條短信的內容
// 將內容插入數據庫
// ctx.getContentResolver().insert(uri, values)
}

} catch (XmlPullParserException e) {
e.printStackTrace();
}


}





}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章