Android学习笔记【09】【四大组件之内容提供者】

一、内容提供者(contentProvider)作用

1、创建数据方法:定义一个类继承SQLiteOpenHelper

应用间访问数据库

二、内容提供者原理

内容提供者把数据封装后向外提供,其他应用通过内容解析者访问

三、实现内容提供者步骤

1、定义一个类继承ContentProvider

2、配置清单文件

3、定义UriMatcher

4、定义静态代码块,添加匹配规则

四、备份短信案例

Uri uri = Uri.parse("content://sms/");
Cursor cursor = getContentResolver().query(uri, new String[]{"address", "date", "body"}, null, null, null);

XmlSerializer xml = Xml.newSerializer();
File file = new File(getFilesDir().getPath(), "mysms.xml");
FileOutputStream fos = new FileOutputStream(file);
xml.setOutput(fos, "utf-8");

xml.startDocument("utf-8", true);
xml.startTag(null, "smss");
while (cursor.moveToNext()) {
    String address = cursor.getString(0);
    String date = cursor.getString(1);
    String body = cursor.getString(2);

    Log.d("mydata", address + "---" + body + "---" + date);

    xml.startTag(null, "sms");
    xml.startTag(null, "address");
    xml.text(address);
    xml.endTag(null, "address");

    xml.startTag(null, "body");
    xml.text(body);
    xml.endTag(null, "body");

    xml.startTag(null, "date");
    xml.text(date);
    xml.endTag(null, "date");
    xml.endTag(null, "sms");
}

xml.endTag(null, "smss");
xml.endDocument();

fos.close();

五、利用内容提供者插入短信

六、读取联系人案例

mimetype表<---mimetype_id--->data表<---raw_contact_id-contact_id--->raw_contact表

七、插入联系人

八、内容观察者

Uri uri=Uri.parse("content://sms");
getContentResolver().registerContentObserver(uri,true,new MyContentObserver(new Handler()));

MyContentObserver继承自ContentObserver,重写onChange方法,当观察的内容发生改变的时候执行。

内容观察者,需要内容提供者写notifyChange通知发生改变

九、内容观察者应用场景

posted on 2017-09-04 19:37  风云剑策  阅读(446)  评论(0编辑  收藏  举报

导航