使用內容提供者讀取短信內容,寫入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);
以上就是本文的全部內容,希望對大家的學習有所幫助。
新聞熱點
疑難解答