访问内容提供者

来源:互联网 发布:网络安全技术有哪几类 编辑:程序博客网 时间:2024/06/14 16:59

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

备份短信需要在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();        }    }    }
原创粉丝点击