使用内容提供者读取短信内容,写入XML文件,进度条ProgressDialog更新备份进度。
新知识点:子线程如何在在不使用Handler的情况下更新UI
public class SmsBackupUtils {
private static class Data{
int progress;
}
public static void smsBackup(Activity context,final ProgressDialog pd){
Uri uri = Uri.parse("content://sms/");
ContentResolver cr = context.getContentResolver();
//取出短信
final Cursor cursor = cr.query(uri, new String[]{"address","date","body","type"}, null, null, null);
final int count = cursor.getCount();
final Data data = new Data();
data.progress = 0;
//存储路径
File file = new File(Environment.getExternalStorageDirectory(), "sms.xml");
try {
FileOutputStream fos = new FileOutputStream(file);
PrintWriter pw = new PrintWriter(fos);
//按照XML格式进行写入
pw.println("");
//在主线程中更新UI
context.runonUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
pd.setMax(count);
pd.show();
}
});
//写入XML文件
while(cursor.moveTonext()){
data.progress ++;
String address = cursor.getString(0);
String date = cursor.getString(1);
String body = cursor.getString(2);
String type = cursor.getString(3);
//SystemClock.sleep(150);
pw.println("");
pw.println(""+ address +"");
pw.println(""+ date +" ");
pw.println(""+ body +"");
pw.println(""+ type +" ");
pw.println(" ");
context.runonUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
pd.setProgress(data.progress);
}
});
}
pw.println(" ");
pw.flush();
pw.close();
cursor.close();
//备份完成,关闭进度条
context.runonUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
pd.dismiss();
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
调用
pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); SmsBackupUtils.smsBackup(SuperToolActivity.this, pd);
以上就是本文的全部内容,希望对大家的学习有所帮助。



