练手小项目(5)安全卫士_利用内容提供者进行短信备份 修正版
来源:互联网 发布:淘宝销量代码 编辑:程序博客网 时间:2024/05/19 06:39
短信备份类,我在上一节基本全部讲完了,代码的迭代开发,是需要的,开发完就需要做代码重构,解耦
可学到的知识点
①接口的应用
②简单的ui线程使用runOnUiThread
上一节,讲到 如果公司老板频繁的话UI需求的话,对于一个项目组来说是很头痛的,因为基本是一个人负责UI,一个人负责业务类的。所以为了解耦,我们要改造Smsutils
因为在类中经常变动的就是 UI,开始备份的时候,设置进度的最大值 ,备份过程中,增加进度 所以我们就把经常变动的抽出来定义成接口,让使用者选择传递什么样的值。
①接口的应用
/** * 备份短信的回调接口 */public interface BackUpCallBack {/** * 开始备份的时候,设置进度的最大值 * * @param max * 总进度 */public void beforeBackup(int max);/** * 备份过程中,增加进度 * * @param progress * 当前进度 */public void onSmsBackup(int progress);}
// pd.setMax(max);
callBack.beforeBackup(max);
当工具类走到这一步,因为接口的抽象方法在调用者那里写着,所以最后还是执行了 调用者类中的
pd.setProgress(progress);
依次类推
// pd.setProgress(process); callBack.onSmsBackup(process);走到这里的时候,确实也是调用了
pd.setMax(max);这时候 progressbar 就会出现了。就这样解耦了
②简单的ui线程使用runOnUiThread
因为备份短信的时候,顾虑到可能用户的短信比较多,所以开启了一个子线程进行更新,然后又要使用到Toast 这个时候 简单的使用UI更新 就会使用到他
runOnUiThread
runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(SmsActivity.this, "备份成功", 0).show();}});
SmsUtils.java 备份短信工具类
package com.example.Darkbutton.Utils;import java.io.File;import java.io.FileOutputStream;import org.xmlpull.v1.XmlSerializer;import android.app.ProgressDialog;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.Environment;import android.util.Xml;/** * 短信的工具类 * */public class SmsUtils {/** * 备份短信的回调接口 */public interface BackUpCallBack {/** * 开始备份的时候,设置进度的最大值 * * @param max * 总进度 */public void beforeBackup(int max);/** * 备份过程中,增加进度 * * @param progress * 当前进度 */public void onSmsBackup(int progress);}public static void backupSms(Context context, BackUpCallBack callBack) throws Exception {//ProgressDialog pd=new ProgressDialog(context);//pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//pd.setMessage("正在备份数据");//pd.show();File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");FileOutputStream fos = new FileOutputStream(file);ContentResolver resolver = context.getContentResolver();Uri uri = Uri.parse("content://sms/");Cursor cursor = resolver.query(uri, new String[] { "body", "address","type", "date" }, null, null, null);// 开始备份的时候,设置进度条的最大值int max = cursor.getCount();//pd.setMax(max);callBack.beforeBackup(max);// 把用户的短信一条一条读出来,按照一定的格式写到文件里XmlSerializer serializer = Xml.newSerializer();// 初始化生成器serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true);serializer.startTag(null, "smss");serializer.attribute(null, "max", max + "");int process = 0;while (cursor.moveToNext()) {Thread.sleep(500);String body = cursor.getString(0);String address = cursor.getString(1);String type = cursor.getString(2);String date = cursor.getString(3);serializer.startTag(null, "sms");serializer.startTag(null, "body");serializer.text(body);serializer.endTag(null, "body");serializer.startTag(null, "address");serializer.text(address);serializer.endTag(null, "address");serializer.startTag(null, "type");serializer.text(type);serializer.endTag(null, "type");serializer.startTag(null, "date");serializer.text(date);serializer.endTag(null, "date");serializer.endTag(null, "sms");// 备份过程中,增加进度process++;// pb.setProgress(process);//pd.setProgress(process);callBack.onSmsBackup(process);}cursor.close();serializer.endTag(null, "smss");serializer.endDocument();fos.close();// pd.dismiss();}}
SmsActivity
package com.example.Darkbutton;import com.example.Darkbutton.Utils.SmsUtils;import com.example.Darkbutton.Utils.SmsUtils.BackUpCallBack;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class SmsActivity extends Activity implements OnClickListener {private Button button1;private ProgressDialog pd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.sms_activity);button1 = (Button) findViewById(R.id.button1);button1.setOnClickListener(this);}@Overridepublic void onClick(View v) {pd = new ProgressDialog(this);pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.setMessage("正在备份短信");pd.show();new Thread(){ @Overridepublic void run() {try {SmsUtils.backupSms(SmsActivity.this,new BackUpCallBack() {@Overridepublic void onSmsBackup(int progress) {pd.setProgress(progress);}@Overridepublic void beforeBackup(int max) {pd.setMax(max);}});runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(SmsActivity.this, "备份成功", 0).show();}});} catch (Exception e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(SmsActivity.this, "备份失败", 0).show();}});}finally{pd.dismiss();}};}.start();}}
因为代码在我测试demo里面 还放了一些其他东西,所以源码就不放上了。 最后记得加上权限哦
<uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.WRITE_SMS"/>
0 0
- 练手小项目(5)安全卫士_利用内容提供者进行短信备份 修正版
- 练手小项目(5)安全卫士_利用内容提供者进行短信备份
- 练手小项目(4)安全卫士——黑名单拦截 利用内容提供者删除通话记录
- 练手小项目(5)安全卫士_电源管理
- 练手小项目(5)安全卫士_软件管理器
- 练手小项目(5)安全卫士_程序锁
- 练手小项目(5)安全卫士_程序锁bug修复一
- 练手小项目(5)安全卫士——手机加速
- 4.1短信备份,利用系统短信内容提供者ContentResolver
- android 利用内容提供者备份短信(XML序列化器)
- 练手小项目(4)安全卫士——黑名单拦截
- (内容提供者)备份短信和添加短信
- 练手小项目(4)安全卫士——黑名单拦截,广播和服务的加入进行拦截
- Android项目:手机安全卫士(14)—— 短信备份
- 内容提供者复习——短信备份
- android内容提供者contentProvider_短信备份
- 安卓1110_四大组件-ContentProvider内容提供者 备份短信 查询联系人 插入联系人
- android:利用内容提供者操作短信
- Installing VMware Tools in a Linux virtual machine using a Compiler (1018414)
- 跟我一起写makefile二
- 跟我一起写makefile三
- 十一月总结
- 跟我一起写makefile四
- 练手小项目(5)安全卫士_利用内容提供者进行短信备份 修正版
- 跟我一起写makefile 五
- valgrind用法
- 这三天学到的设计模式
- 关于c++可变参数的理解
- 跟我一起写makefile 六
- Howto install VMware tools on Centos 6.3 or Redhat 6.3 RHEL
- mp4文件格式解析
- c语言 头文件 手札