Androidがメールバックアップを行うツールクラスで、進捗バー表示をサポート


コンテンツプロバイダを使ってメールの内容を読み取り、XMLファイルに書き込み、
進捗バー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);