访问内容提供者
来源:互联网 发布:网络安全技术有哪几类 编辑:程序博客网 时间: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(); } } }
阅读全文
0 0
- 内容提供者访问
- 访问内容提供者
- 访问内容提供者
- 内容提供者访问通讯录
- 访问内容提供者
- Android 访问自定义内容提供者
- Android_09_自定义内容提供者及访问内容提供者
- 内容提供者创建,访问和权限
- android_访问系统短信内容提供者
- ContentProvider内容提供者,跨进程访问方式
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- 内容提供者
- Educational Codeforces Round 22 题解
- android 仿微信9宫格图片
- 跨平台跨语言的分布式开发框架ICE
- vue初级学习--idea的环境搭建
- Redis连接时报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 访问内容提供者
- AngularJs 自定义表单验证
- php--正则表达式
- STM32F4 IAP BOOTLOADER YMODEM
- 补上上次网络请求没写retrofit
- Bootstrap模态框插件
- mybatis入门中
- IMWeb前端秋招训练营--前端作业6
- Kotlin相关基础及与Java的不同 的 笔记(两)