访问内容提供者

访问内容提供者,可以获取很多其他应用的信息,比如短信,下面就用备份短信的案例

备份短信需要在AndroidMainfest.xml中添加权限:

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

一个是读短信权限,一个是写外部存储权限
备份短信的时候涉及到了XML序列化的问题,还有获取一个游标访问短信数据库,在此不过多赘述,直接附上代码:

MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view){
        //设定访问短信的Uri
        Uri uri = Uri.parse("content://sms/");
        ContentResolver resolver = getContentResolver();
        //获取Resolver并且通过这个对象查询短信,获取数据库的一个游标
        Cursor cursor = resolver.query(uri,new String[] {"address","date","type","body"},null,null,null);
        //创建一个list来保存备份的短信数据
        List<SmsInfo> smsInfoList = new ArrayList<>();
        //创建一个循环保存短信数据;
        if (cursor != null) {
            while(cursor.moveToNext()){
                String address = cursor.getString(0);
                long date = cursor.getLong(1);
                int type = cursor.getInt(2);
                String body = cursor.getString(3);
                SmsInfo smsInfo = new SmsInfo(date,type,body,address);
                smsInfoList.add(smsInfo);
            }
            cursor.close();
        }
        SmsUtils.backUpSms(smsInfoList,this);
    }
}

SMSInfo工具类:保存短信信息

public class SmsInfo {
    private long date;
    private int type;
    private String body;
    private String address;
    private int id;

    public SmsInfo(){}
    public SmsInfo(long date,int type,String body,String address,int id){
        this.date = date;
        this.type = type;
        this.body = body;
        this.address = address;
        this.id = id;
    }
    public SmsInfo(long date,int type,String body,String address){
        this.date = date;
        this.type = type;
        this.body = body;
        this.address = address;
    }

    public long getDate() {
        return date;
    }

    public void setDate(long 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 getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

SmsUtils工具类:序列化短信信息

public class SmsUtils {
    public static void backUpSms(List<SmsInfo> smsInfos, Context context){
        try {
        XmlSerializer serializer = Xml.newSerializer();
            File file = new File(Environment.getExternalStorageDirectory(),"sms.xml");
            FileOutputStream os = new FileOutputStream(file);
            serializer.setOutput(os,"utf-8");
            serializer.startDocument("utf-8",true);

            serializer.startTag(null,"smss");
            for (SmsInfo info : smsInfos) {
                serializer.startTag(null, "sms");
                serializer.attribute(null, "id", info.getId() + "");

                serializer.startTag(null, "body");
                serializer.text(info.getBody());
                serializer.endTag(null, "body");

                serializer.startTag(null, "address");
                serializer.text(info.getAddress());
                serializer.endTag(null, "address");

                serializer.startTag(null, "type");
                serializer.text(info.getType() + "");
                serializer.endTag(null, "type");

                serializer.startTag(null, "date");
                serializer.text(info.getDate() + "");
                serializer.endTag(null, "date");

                serializer.endTag(null, "sms");
            }
            serializer.endTag(null,"smss");
            serializer.endDocument();
            os.close();
            Toast.makeText(context,"备份成功",Toast.LENGTH_LONG).show();


            } catch (IOException e1) {
                e1.printStackTrace();
                Toast.makeText(context,"备份失败",Toast.LENGTH_LONG).show();
        }
    }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值