Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
来源:互联网 发布:梵高怎么得的精神 知乎 编辑:程序博客网 时间:2024/05/16 01:36
我们今天要说的就是我们手机卫士里面的高级工具里面的短信备份功能啦,其实这个软件备份的功能也很简单,就是把用户的短信读出来,然后写到一个xml或者数据库里面,
但我们这里的是读取到xml里面的。
首先我们就先在我们的高级工具里面新增两个条目啦,一个是短信备份,一个是短信恢复,就像下面的图一样,具体的那个类的代码我就不粘出来了,因为高级工具这个类挺长的
大家看也看得不爽,如果有什么不明白的,可以看看我们前面的内容
我们要备份短信,那么我们肯定就要先把短信的内容给读取出来啦,其实读取短信的内容也很简单,我们可以参考一下Android自己的短信管理器是怎样写的,然后我们照着写就行啦,那怎样拿到Android自己的短信管理器的源码呢,有两种方法,一种就是从Android的开源网站上下载,如果不会的可以看看我们的文章Android源码下载
还有和种方法就是拿到Android系统的apk然后反编译它,如果不会的话,可以看看我们的文章获取Android自己写好了的apk以及反编译
其实获取短信和获取系统的联系人都是差不多的,大家也可以参考一下我们之前写的那个获取手机联系人
也可以参考一下我们下面写的
首先我们新建一个Model类还有一个类是用来读取用户的短信内容
com.xiaobin.security.domain.SmsInfo
package com.xiaobin.security.domain;public class SmsInfo{private String id;private String address;private String date;private int type;private String body;public String getAddress(){return address;}public void setAddress(String address){this.address = address;}public String getDate(){return date;}public void setDate(String date){this.date = date;}public int getType(){return type;}public void setType(int type){this.type = type;}public String getBody(){return body;}public void setBody(String body){this.body = body;}public String getId(){return id;}public void setId(String id){this.id = id;}}
读取手机短信内容的类
package com.xiaobin.security.engine;import java.util.ArrayList;import java.util.List;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.net.Uri;import com.xiaobin.security.domain.SmsInfo;public class SmsService{private Context context;public SmsService(Context context){this.context = context;}public List<SmsInfo> getSmsInfo(){List<SmsInfo> infos = new ArrayList<SmsInfo>();ContentResolver resolver = context.getContentResolver();Uri uri = Uri.parse("content://sms/");Cursor cursor = resolver.query(uri, new String[] {"_id", "address", "date", "type", "body"}, null, null, " date desc ");SmsInfo info;while(cursor.moveToNext()){info = new SmsInfo();String id = cursor.getString(0);String address = cursor.getString(1);String date = cursor.getString(2);int type = cursor.getInt(3);String body = cursor.getString(4);info.setId(id);info.setAddress(address);info.setDate(date);info.setType(type);info.setBody(body);infos.add(info);}cursor.close();return infos;}}
拿到短信内容的类,我们也写好啦,那么现在我们就要来完善一下备份的过程啦
我们备份短信,有可能会要很久时间的,当用户的短信量特别大的时候,所以我们就不能在主界面里面操作啦,所以我们就开启一个服务,来进行短信的备份
com.xiaobin.security.service.BackupSmsService
package com.xiaobin.security.service;import java.io.File;import java.io.FileOutputStream;import java.util.List;import org.xmlpull.v1.XmlSerializer;import android.app.Service;import android.content.Intent;import android.os.Environment;import android.os.IBinder;import android.os.Looper;import android.util.Xml;import android.widget.Toast;import com.xiaobin.security.domain.SmsInfo;import com.xiaobin.security.engine.SmsService;public class BackupSmsService extends Service{SmsService smsService;@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic void onCreate(){super.onCreate();smsService = new SmsService(this);new Thread(){public void run() {List<SmsInfo> infos = smsService.getSmsInfo();File dir = new File(Environment.getExternalStorageDirectory(), "/security/backup");if(!dir.exists()){dir.mkdirs();}File file = new File(Environment.getExternalStorageDirectory() + "/security/backup/smsbackup.xml");//创建一个xml的序列化器XmlSerializer xmlSerializer = Xml.newSerializer();try{FileOutputStream fos = new FileOutputStream(file);//设置写xml的编码xmlSerializer.setOutput(fos, "utf-8");xmlSerializer.startDocument("utf-8", true);xmlSerializer.startTag(null, "smss");for(SmsInfo info : infos){xmlSerializer.startTag(null, "sms");xmlSerializer.startTag(null, "id");xmlSerializer.text(info.getId());xmlSerializer.endTag(null, "id");xmlSerializer.startTag(null, "address");xmlSerializer.text(info.getAddress());xmlSerializer.endTag(null, "address");xmlSerializer.startTag(null, "date");xmlSerializer.text(info.getDate());xmlSerializer.endTag(null, "date");xmlSerializer.startTag(null, "type");xmlSerializer.text(info.getType() + "");xmlSerializer.endTag(null, "type");xmlSerializer.startTag(null, "body");xmlSerializer.text(info.getBody());xmlSerializer.endTag(null, "body");xmlSerializer.endTag(null, "sms");}xmlSerializer.endTag(null, "smss");xmlSerializer.endDocument();fos.flush();fos.close();//在子线程里面是不能弹出一个Toast的,因为子线程里面没有Looper,//但我们通过下面几个步骤就可以在子线程里面弹出Toast了Looper.prepare();//创建一个LooperToast.makeText(getApplicationContext(), "备份成功", Toast.LENGTH_SHORT).show();Looper.loop();//轮循一次Looper}catch (Exception e){Looper.prepare();//创建一个LooperToast.makeText(getApplicationContext(), "备份失败", Toast.LENGTH_SHORT).show();Looper.loop();//轮循一次Loopere.printStackTrace();}}}.start();}}
就这样,我们的备份的服务也写好啦,先在AndroidManifest文件里面注册一下它,然后再把短信操作的权限给加上
<service android:name="com.xiaobin.security.service.BackupSmsService"></service>
<uses-permission android:name="android.permission.WRITE_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/>
然后我们再回到com.xiaobin.security.ui.AToolActivity这个类里面啦,给备份的那个条目注册一个点击事件,然后一点击就开启备份的服务
case R.id.tv_atool_sms_backup : Intent backupIntent = new Intent(this, BackupSmsService.class);startService(backupIntent);break;
好啦,到现在为止,短信备份就差不多完成的啦,我们下一次说一下我们短信的恢复
今天源码下载
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
- Android项目实战--手机卫士19--短信的恢复
- Android项目实战--手机卫士30--读取应用的权限以及自定义Toast
- Android项目实战--手机卫士10--GPS定位与发送短信指令
- Android 获取手机联系人以及短信内容
- Android项目实战--手机卫士22--卸载和分享功能的完成以及用户及系统应用的切换
- android读取短信内容
- android 读取短信内容
- Android项目实战--手机卫士
- Android项目实战--手机卫士15--设置手机归属地的样式以及显示位置
- 黑马程序员金山卫士实战短信备份2集
- Android读取并备份用户短信(xml方式)
- Android项目实战--手机卫士28--读取进程的信息并显示出来
- Android读取手机中的短信
- 读取手机第一条短信内容和监听手机新收到的短信
- androidの读取短信内容
- Android项目:手机安全卫士(14)—— 短信备份
- Redis实战之征服 Redis + Jedis + Spring (二)
- C#中窗体使用Invoke和BeginInvoke详解
- Power Strings(kmp 重复子串)
- boost::checked_delete作用介绍
- excelDownload
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
- 黑马程序员------Java的泛型(原理应用、自定义泛型)
- log4j:ERROR Could not instantiate class [org.apache.hadoop.hive.shims.HiveEventCounter].
- PowerDesigner 学习及使用
- Delphi JSON 天气预报
- 线程同步与互斥
- 温度PID的整定过程
- multipart/form-data和application/x-www-form-urlencoded
- Redis实战之征服 Redis + Jedis + Spring (三)