使用内容提供者备份短信

1、获取短信的权限配置

1  <uses-permission android:name="android.permission.READ_SMS"/>
2     <uses-permission android:name="android.permission.WRITE_SMS"/>

2、通过内容提供者获取短信内容

 1 package com.example.readsysmsm;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import com.example.readsysmsm.domain.SmsInfo;
 7
 8 import android.net.Uri;
 9 import android.os.Bundle;
10 import android.app.Activity;
11 import android.content.ContentResolver;
12 import android.database.Cursor;
13 import android.view.View;
14
15 public class MainActivity extends Activity {
16
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21
22
23     }
24
25     public void readAllMsm(View view){
26         List<SmsInfo> smsInfos = new ArrayList<SmsInfo>();
27         ContentResolver resolver = getContentResolver();
28         Uri uri = Uri.parse("content://sms/");
29         Cursor cursor = resolver.query(uri, new String[]{"address","date","type","body"}, null, null, null);
30         while(cursor.moveToNext()){
31             String address = cursor.getString(0);
32             Long date = cursor.getLong(1);
33             int type = cursor.getInt(2);
34             String body = cursor.getString(3);
35             SmsInfo smsInfo = new SmsInfo(date,type,body,address);
36             smsInfos.add(smsInfo);
37         }
38
39         SmsUtils.backup(smsInfos, this);
40     }
41
42 }

3、通过xml备份sms数据

 1 package com.example.readsysmsm;
 2
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.util.List;
 6
 7 import org.xmlpull.v1.XmlSerializer;
 8
 9 import com.example.readsysmsm.domain.SmsInfo;
10
11 import android.content.Context;
12 import android.os.Environment;
13 import android.util.Xml;
14 import android.widget.Toast;
15
16 public class SmsUtils {
17     public static void backup(List<SmsInfo> smsInfos, Context context){
18         try
19         {
20             XmlSerializer serializer = Xml.newSerializer();
21             File file = new File(Environment.getExternalStorageDirectory(),"myback2.xml");
22             FileOutputStream os = new FileOutputStream(file);
23             serializer.setOutput(os,"utf-8");
24             serializer.startDocument("utf-8", true);
25             serializer.startTag(null, "smss");
26
27             for(SmsInfo info : smsInfos)
28             {
29                 serializer.startTag(null, "sms");
30
31                 serializer.startTag(null, "body");
32                 serializer.text(info.getBody());
33                 serializer.endTag(null, "body");
34
35                 serializer.startTag(null, "address");
36                 serializer.text(info.getAddress());
37                 serializer.endTag(null, "address");
38
39                 serializer.startTag(null, "type");
40                 serializer.text(info.getType() + "");
41                 serializer.endTag(null, "type");
42
43                 serializer.startTag(null, "date");
44                 serializer.text(info.getDate() + "");
45                 serializer.endTag(null, "date");
46
47                 serializer.endTag(null, "sms");
48             }
49
50             serializer.endTag(null, "smss");
51             serializer.endDocument();
52             os.close();
53             Toast.makeText(context, "生成成功!", 0).show();
54         }catch(Exception e){
55             e.printStackTrace();
56             Toast.makeText(context, "生成失败!", 0).show();
57         }
58     }
59
60 }

4、写数据进外存的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

5、信息类

 1 package com.example.readsysmsm.domain;
 2
 3 public class SmsInfo {
 4     private long date;
 5     private int type;
 6     private String body;
 7     private String address;
 8
 9     public SmsInfo()
10     {
11         date = 0;
12         type = 1;
13         body = "";
14         address = "";
15     }
16
17     public SmsInfo(long date, int type, String body, String address)
18     {
19         this.date = date;
20         this.type = type;
21         this.body = body;
22         this.address = address;
23     }
24
25     public long getDate()
26     {
27         return date;
28     }
29
30     public void setDate(long date)
31     {
32         this.date = date;
33     }
34
35     public long getType()
36     {
37         return type;
38     }
39
40     public void setType(int type)
41     {
42         this.type = type;
43     }
44
45     public String getBody()
46     {
47         return body;
48     }
49
50     public void setBody(String body)
51     {
52         this.body = body;
53     }
54
55     public String getAddress()
56     {
57         return address;
58     }
59
60     public void setAddress(String address)
61     {
62         this.address = address;
63     }
64 }
时间: 2024-10-11 07:49:21

使用内容提供者备份短信的相关文章

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

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

Android开发_备份短信

 短信备份的原理 短信备份的原理,是用内容提供者读取短信,然后保存. public class SmsBackupUtils { // 回调接口 public interface SmsBackupCallback { /** * 短信备份前调用 * @param total 短信的总条数 */ public void beforeSmsbackup(int total); /** * 短信调用中调用 * @param progress 短信的进度 */ public void progre

Android发展_备份短信

 短信备份的原理 短信备份的原理.是用内容提供者读取短信,然后保存. public class SmsBackupUtils { // 回调接口 public interface SmsBackupCallback { /** * 短信备份前调用 * @param total 短信的总条数 */ public void beforeSmsbackup(int total); /** * 短信调用中调用 * @param progress 短信的进度 */ public void progre

内容观察者实现短信监听

内容观察者实现短信监听 通过内容观察者监听短信是否发生变化,如果发生变化,就用内容提供者读取短信的内容. 原理: 当短信发生变化(比如说来短信),短信应用就会通知内容观察者我的短信发生了变化,并把变化位置短信的uri传过来,有uri之后,内容提供者就可以很方便的读取短信内容了,不过肯定要保证权限够. package com.example.duanxinjianting; import android.app.Activity; import android.database.ContentOb

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

备份短信

/** * 备份短信的工具方法 * @param context 上下文 * @param fos 备份到哪个文件输出流里面. * @throws Exception */ public static void backUp(Context context,FileOutputStream fos) throws Exception {//在自己的方法中使用接口 ContentResolver resolver = context.getContentResolver(); Uri uri =

[android]ShareSDK——内容分享和短信验证

前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决的方法:分享用旧版本号,短信验证用新版本号. 后面会有解决的方法. 分享 导入project见初识ShareSDK--嵌入和登陆 <span style="font-size:24px;">OnekeyShare oks = new OnekeyShare(); //全部SSO

ContentProvider备份短信,以xml文件存储

因为短信的内容已经通过ContentProvider暴露出来,所以我们可以直接用内容解析者获取短信内容. 想要获取短信内容,你需要知道的一些东西: 1.Uri uri = Uri.parse("content://sms/"); 2.Cursor cursor = getContentResolver().query(uri,new String[]{"address","date","body"},null,null,nul

Android--获取短信的内容,截取短信

1.首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了 2.在广播里面,我们重写的onReceive()方法,通过里面的Intent写到的Bundle就可以拿到短信的内容, 3.清单文件里面我们必须要添加权限,否则无法接收到. 4.为了防止我们的广播接收不到,我们自己写的广播接收器的权限必须要大,以防万一,我设置了1000. 下面上代码,里面的注释也比较详细.. 1 <?xml version="1.0" encoding