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();
}


}





}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值