Androidは進捗バー表示をサポートするメールバックアップツールクラスを実現

3464 ワード

コンテンツ・プロバイダを使用してメールの内容を読み取り、XMLファイルに書き込み、プログレス・ダイアログでバックアップの進捗を更新します.新しい知識点:サブスレッドが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(""); 
       
      //       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); 

以上が本文のすべての内容で、みんなの学習に役立つことを望みます.