Androidがメールバックアップを行うツールクラスで、進捗バー表示をサポート
2675 ワード
コンテンツプロバイダを使ってメールの内容を読み取り、XMLファイルに書き込み、
進捗バーProgressDialogバックアップ進捗の更新
新しい知識点:サブスレッドがHandlerを使用せずにUIを更新する方法
よびだし
進捗バーProgressDialogバックアップ進捗の更新
新しい知識点:サブスレッドがHandlerを使用せずにUIを更新する方法
/**
* ,
* @author lian
*
*/
public class SmsBackupUtils {
private static class Data{
int progress;
}
/**
*
* @param context
* Activity
* @param pd
*
*/
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("<smses count='" + cursor.getCount() +"'>");
// 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("<sms>");
pw.println("<address>"+ address +"</address>");
pw.println("<date>"+ date +"</date>");
pw.println("<body>"+ body +"</body>");
pw.println("<type>"+ type +"</type>");
pw.println("</sms>");
context.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
pd.setProgress(data.progress);
}
});
}
pw.println("</smses>");
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);