android content provider
Uri类
Uri uri = Uri.parse("content://com.example.provider.contactprovider/contact/11")
- content://
Android内容URI,说明由ContentProvider控制数据,是固定形式
- com.example.provider.contactprovider
URI的授权部分authority,唯一标识符,用来定位ContentProvider.
格式一般是自定义ContentProvider类的完全限定名称,注册时需要用到 - contact
指向一个对象集合,一般用表的名字
- 11
指向特定的记录,如果没有指定,则返回全部记录
UriMatcher 识别URi
- UriMatcher uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
匹配失败时返回UriMatcher.NO_MATCH
- 注册 uriMatcher.addURI("com.example.app.provider", "table1", number);
权限(android:authorities) "com.example.app.provider"
路径 "table1" ,"table1/#" ,"table1/*"
匹配码 number - 使用 uriMatcher.match(uri) 返回匹配码
- 通配符
*:表示匹配任意长度的任意字符
#:表示匹配任意长度的数字
MIME 类型和子类型
- text/html text/css text/xml application/pdf
- 访问单个资源的URI : vnd.android.cursor.item/vnd.[company name].[resource type]
content://com.example.app.provider/table1/1
vnd.android.cursor.item/vnd. com.example.app.provider.table1 - 访问多个资源的URI : vnd.android.cursor.dir/vnd.[company name].[resource type]
content://com.example.app.provider/table1
vnd.android.cursor.dir/vnd.com.example.app.provider.table1
读取数据 ContentResolver Content.getContentResolver()
Android附带的ContentProvider
- Browser:存储如浏览器的信息
- CallLog:存储通话记录等信息
- Contacts:存储联系人等信息
- MediaStore:存储媒体文件的信息
- Settings:存储设备的设置和首选项信息
创建自定义的ContentProvider extends ContentProvider
- 注册ContentProvider
<provider android:name="Provider" android:authorities="com.example.app.provider" />
- onCreate()
初始化内容提供器的时候调用,通常会在这里完成对数据库的创建和升级等操作
只有当存在ContentResolver尝试访问时,才会被初始化 - query()
projection 参数用于确定查询哪些列
- insert()
- update()
- delete()
- getType()
根据传入的内容URI 来返回相应的MIME 类型
访问权限
- android:grantUriPermssions:临时许可标志
- android:permission:Provider读写权限
- android:readPermission:Provider的读权限
- android:writePermission:Provider的写权限
- android:enabled:标记允许系统启动Provider
- android:exported:标记允许其他应用程序使用这个Provider
- android:multiProcess:标记允许系统启动Provider相同的进程中调用客户端