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;

好啦,到现在为止,短信备份就差不多完成的啦,我们下一次说一下我们短信的恢复


今天源码下载

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 闲鱼上卖出的宝贝被调包了怎么办 上传身份证照片说格式错误该怎么办 我给厂里打的款不给发货怎么办 净值接近不定期份额折算阀值怎么办 有锁电信4g掉了怎么办 在电脑中找不到想作废的发票怎么办 科目三补考费发票丢了怎么办 母婴店飞鹤奶粉突然厂家撤货怎么办 澳门买的保健品感觉是假的怎么办 淘宝买东西提交需求时卡死了怎么办 天猫精灵显示为离线状态怎么办 退货多被淘宝店铺拉入黑名单怎么办 天猫订单3天不发货怎么办 新开的厨卫店越来越没生意怎么办 淘宝积分不够领不到购物津贴怎么办 穿越火线精英集结号积分不足怎么办 天猫购物津贴领多了怎么办 车贷逾期车被开走还不清全款怎么办 孩子特别懒不爱动又胖怎么办 微信的聊天记录被限制了怎么办 门面租金交了一年对方不租了怎么办 离职后社保怎么办 无忧保专业可靠 淘宝店铺被投诉到监管局怎么办 淘宝买家每天都来店铺骚扰怎么办 电脑安装软件时解压出现问题怎么办 公婆不尊重你的父母做媳妇的怎么办 手机扣扣接收不上文件怎么办 买了商铺付了首付商铺倒闭了怎么办 宝宝刚满月不喜欢在床上睡怎么办 别人给我打了收货款不发货怎么办 业务员私收货款公司不发货怎么办 付款后商家没发货也不退钱怎么办 苹果7P修过主板耗电严重怎么办 oppo手机进水了开不了机怎么办 手机弯了变形但不影响使用怎么办 拼多多留错电话怎么办如果已经发货 苹果6手机后壳变形了怎么办 京东退货保修卡丢了怎么办 如果京东买的显示器屏碎了怎么办 在微信上买东西退货不退钱怎么办 手机分期付款不还款被起诉了怎么办