使用内容提供者备份短信

Posted zhongyinghe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用内容提供者备份短信相关的知识,希望对你有一定的参考价值。

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 }

 

以上是关于使用内容提供者备份短信的主要内容,如果未能解决你的问题,请参考以下文章

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

android小知识点代码片段

firebase 的短信代码不匹配

黑马程序员金山卫士实战短信备份2集

短信的内容提供者Uri和短信表结构

Android读取短信和联系人