短信的备份

package com.example.sms;
import java.io.File;
import java.io.FileOutputStream;
import org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
 //查
   public void query(View v) {//查询手机短信
      // 1. 获取内容解析器
      ContentResolver resolver = getContentResolver();
      // 2. 指定uri
      Uri uri = Uri.parse("content://sms/");
      // 3. 查询
      Cursor cursor = resolver.query(uri, new String[] { "address", "body","read", "date", "type" }, null, null, null);
      while (cursor.moveToNext()) {
         String address = cursor.getString(0);
         String body = cursor.getString(1);
         String read = cursor.getString(2);
         String date = cursor.getString(3);
         String type = cursor.getString(4);
         SmsBean smsBean = new SmsBean(address, date, body, type, read);
         System.out.println(smsBean.toString());
      }
   }
   /**
    * 1. 读取系统短信 2. 用xml文件备份系统短信
    */
//备份
   public void backup(View v) {
      // 1. 获取内容解析器
      ContentResolver resolver = getContentResolver();
      // 2. 指定uri
      Uri uri = Uri.parse("content://sms/");
      // 3. 查询
      Cursor cursor = resolver.query(uri, new String[] { "address", "body","read", "date", "type" }, null, null, null);
      try {
         // 初始化序列化器
         XmlSerializer serializer = Xml.newSerializer();
         // 设置参数
         FileOutputStream os = new FileOutputStream(new File("/mnt/sdcard/sms.xml"));
         serializer.setOutput(os, "utf-8");
         // 写数据
         serializer.startDocument("utf-8", true);
         // 跟标签
         serializer.startTag(null, "smss");
         while (cursor.moveToNext()) {
            String address = cursor.getString(0);
            String body = cursor.getString(1);
            String read = cursor.getString(2);
            String date = cursor.getString(3);
            String type = cursor.getString(4);
            serializer.startTag(null, "sms");
            // 手机号码
            serializer.startTag(null, "address");
            serializer.text(address);
            serializer.endTag(null, "address");
            // 短信内容
            serializer.startTag(null, "body");
            serializer.text(body);
            serializer.endTag(null, "body");
            // 短信阅读状态
            serializer.startTag(null, "read");
            serializer.text(read);
            serializer.endTag(null, "read");
            // 短息收发时间
            serializer.startTag(null, "date");
            serializer.text(date);
            serializer.endTag(null, "date");
            // 短信的收发状态
            serializer.startTag(null, "type");
            serializer.text(type);
            serializer.endTag(null, "type");
            serializer.endTag(null, "sms");
         }
         serializer.endTag(null, "smss");
         serializer.endDocument();
         os.close();
         Toast.makeText(this, "短信存储成功!/mnt/sdcard/sms.xml", 0).show();
      } catch (Exception e) {
         e.printStackTrace();
         Toast.makeText(this, "失败啦,短信神器不流弊啊!", 0).show();
      }
   }
 //插
   public void insert(View v) {
      // 1. 获取内容解析器
      ContentResolver resolver = getContentResolver();
      // 2. 指定uri
      Uri uri = Uri.parse("content://sms/");
      ContentValues values = new ContentValues();
      values.put("address", "13112345678");
      values.put("read", 0);
      values.put("type", 1);
      values.put("body", "我是在代码中插入的短信");
      values.put("date", System.currentTimeMillis());
      resolver.insert(uri, values);
   }
}

//删
public void delete(View v) {
      int id = resolver.delete(uri, null, null);
   }

//改
public void updata(View v) {
      System.out.println(11);
      ContentValues values = new ContentValues();
      values.put("address", "10000");
      System.out.println(22);
      resolver.update(uri, values, "address = ? ", new String[] { "10086" });
   }
//备份还原短信  解析XML文件
public void restore(View v) {
      XmlPullParser parser = Xml.newPullParser();
      FileInputStream is;
      try {
         list = new ArrayList<MessageBean>();
         MessageBean bean = null;
         String address = null;
         String read = null;
         String date = null;
         String type1 = null;
         String body = null;;
         is = new FileInputStream(new File("/mnt/sdcard/message.xml"));
         parser.setInput(is, "utf-8");
         int type = parser.getEventType();
         while (type != XmlPullParser.END_DOCUMENT) {
            String tag = parser.getName();
            switch (type) {
            case XmlPullParser.START_TAG:
            if(tag.equals("sms")){
                   bean = new MessageBean();
                }
                if (tag.equals("address")) {
                   address = parser.nextText();
                   bean.setAddress(address);
                } else if (tag.equals("read")) {
                   read = parser.nextText();
                   bean.setRead(read);
                } else if (tag.equals("date")) {
                   date = parser.nextText();
                   bean.setDate(date);
                } else if (tag.equals("type")) {
                   type1 = parser.nextText();
                   bean.setType(type1+"");
                } else if (tag.equals("body")) {
                   body = parser.nextText();
                   bean.setBody(body);
                   list.add(bean);
                   System.out.println(list+"-------------");
                }
                break;
            default:
                break;
            }
            type = parser.next();
         }
         is.close();
         for (int i = 0; i < list.size(); i++) {
            ContentValues values = new ContentValues();
            values.put("address",list.get(i).getAddress());
            values.put("date", list.get(i).getDate());
            values.put("body", list.get(i).getBody());
            values.put("read", list.get(i).getRead());
            values.put("type", list.get(i).getType());
            resolver.insert(uri, values);
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

package com.example.sms;
public class SmsBean {
   private String address;
   private String date;
   private String body;
   private String type;
   private String read;
   public SmsBean(String address, String date, String body, String type,String read) {
      super();
      this.address = address;
      this.date = date;
      this.body = body;
      this.type = type;
      this.read = read;
   }
  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 String getBody() {
      return body;
   }
   public void setBody(String body) {
     this.body = body;
   }
   public String getType() {
      return type;
   }
   public void setType(String type) {
      this.type = type;
   }
   public String getRead() {
      return read;
   }
   public void setRead(String read) {
      this.read = read;
   }
   @Override
   public String toString() {
      return "SmsBean [address=" + address + ", date=" + date + ", body="+ body + ", type=" + type + ", read=" + read + "]";
   }
}

清单文件中加相应的权限:

     <uses-permission android:name="android.permission.READ_SMS"/>
     <uses-permission android:name="android.permission.WRITE_SMS"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
时间: 2024-10-06 21:58:52

短信的备份的相关文章

Android之——短信的备份与还原

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 目前,Android手机中的一些软件可以实现手机短信的备份与还原操作.这篇博文就是要向大家介绍如何实现Android短信的备份与还原操作.好了,相信大家对这些实用的功能还是比较感兴趣的,不多说了,我们直接进入主题吧. 一.原理 我的实现原理很简单,界面上放置几个TextView列表,其中两项为"短信的备份"和"短信的还原",点击&quo

无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

内容提供者(内容提供者实现、使用场景、Uri、短信的备份与还原等等)

1.编写内容提供者 步骤: 1.在工程里创建一个类,继承ContentProvider,重写了onCreate和增删改查的方法: 2.在清单文件中配置一个provider,需要这个数据authorities,用来唯一标识内容者的,在android4.1版本之后需要exported="true"的属性,否则其他应用程序没有权限访问这个内容提供者: 3.在onCreate方法里得到数据库的帮助类: 2.内容提供者工作的原理 模版代码: //uri匹配正时返回的匹配码 int code =

Android短信的备份和回复

在android备份短信和恢复短信对保存信息非常重要  避免删除重要信息后 无法挽回的局面,在此介绍一下对短信数据库的操作,注意:在android中对其他应用程序的数据库操作作的时候 不能以数据库对象的形式操作 必须使用URI转义 Uri uri = Uri.parser("content://sms/"); 对短信数据库的操作需要添加权限 <uses-permission android:name="android.permission.READ_SMS"/

Android中 备份短信 还原短信

备份短信 读取手机里的短信,备份成xml文件保存到SD卡上. xml文件就只有一个button控件,就不再给出xml代码了. import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; i

【android基础篇】利用内容提供者实现短信备份

I,准备工作 系统存储短信内容的目录为:/dada/dada/com.android.providers.telephony/databases/mmssms.db,我们找到对应的数据库文件. 我们可以发现该文件对于第三方而言,是不可读不可写的,这里则必须要使用内容提供者. 问题就来了:我不知道主机名,也就无法作为中间人去找证监会打探消息.其实,完全没有关系,我们可以翻阅安卓的源代码: \packages\providers\TelephonyProvider的清单文件,因为主机名都配置在清单文

Android开发遇到短信备份失败

今天做了一个有关ContentProvider的短信备份的小案例,遇到短信备份失败,费了一番周折后终于找到了问题所在 该案例是将短信写到一个xml文件然后保存在手机存储中实现短信的备份功能,关键实现代码如下 public class SmsUtils { public static void backUpSms(List<SmsInfo> smsInfos, Context context) { try { XmlSerializer serializer = Xml.newSerialize

Android简易实战教程--第八话《短信备份~一》

各种手机助手里面都包含了短信备份这一项.短信的本分主要包含四项:内容body.事件date.方式type.号码address. 短信备份~一.使用一种很笨的方式来保存短信到xml文件中,而且保存在外部存储.后续会有:短信备份~二(xml序列化器):短信备份~三(内容提供者获取短信xml备份):短信备份~四(json方式备份数据库短信).备份的方式越来越高效,比较不同存储方式. 很显然,初次介绍短信备份,以一种简单笨拙的方式,且不涉及内容提供者,虚拟10条短信. 短信的保存,要以对象的形式保存.因

android 中管理短信

为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中. 公开的SDK中没有这个类,不能直接使用.于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常. 看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份. 既然每个db跟package名相关,建立了一个package为com.androi