使用内容提供者读取短信内容,写入xml文件,进度条progressdialog更新备份进度。
新知识点:子线程如何在在不使用handler的情况下更新ui
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/**
* 进行短信备份的工具类,支持进度条显示
* @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();
}
}
}
|
调用
1
2
3
4
|
pd = new progressdialog( this );
pd.setprogressstyle(progressdialog.style_horizontal);
smsbackuputils.smsbackup(supertoolactivity. this , pd);
|
以上就是本文的全部内容,希望对大家的学习有所帮助。