Android学习--11-内容提供器
2016-09-28 00:00
465 查看
不同于文件和SharedPreferences存储中的两种全局读写操作,内容提供器可以选择只对哪一部分数据进行共享,防止数据不会泄露。
ContentResolver类
使用了query()方法,传入uri参数。然后对Cursor对象进行遍历,最后关闭。
当然还需要相应的权限
标准的URI写法:
content://com.example.app.provider/table1
*:表示匹配任意长度的任意字符 #:表示匹配任意长度的数字
content://com.example.app.provider/*
那么谁来实现匹配内容URI呢: UriMatcher
提供了一个addURI() 方法,接收三个参数: 权限、路径、自定义的代码
获取 Uri 对象所对应的 MIME 类型,一个内容 URI 所对应的 MIME字符串主要由三部分组分
必须以 vnd 开头。
如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,
则后接 android.cursor.item/。
最后接上 vnd.<authority>.<path>。
内容提供器在 AndroidManifest.xml 文件中注册
如何去访问自定义的内容提供器呢?
ContentResolver类
读取手机联系人
List<String> contactsList = new ArrayList<String>(); private void readContacts() { Cursor cursor = null; try { // 查询联系人数据 cursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, null, null, null); while (cursor.moveToNext()) { // 获取联系人姓名 String displayName = cursor.getString(cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); // 获取联系人手机号 String number = cursor.getString(cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(displayName + "\n" + number); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } }
使用了query()方法,传入uri参数。然后对Cursor对象进行遍历,最后关闭。
当然还需要相应的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
自定义内容提供器
就像写个接口一样,提供相应路径,访问我,就给你相应的数据。extends ContentProvider
标准的URI写法:
content://com.example.app.provider/table1
*:表示匹配任意长度的任意字符 #:表示匹配任意长度的数字
content://com.example.app.provider/*
那么谁来实现匹配内容URI呢: UriMatcher
提供了一个addURI() 方法,接收三个参数: 权限、路径、自定义的代码
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.example.app.provider", "table1", 0);
获取 Uri 对象所对应的 MIME 类型,一个内容 URI 所对应的 MIME字符串主要由三部分组分
必须以 vnd 开头。
如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,
则后接 android.cursor.item/。
最后接上 vnd.<authority>.<path>。
vnd.android.cursor.dir/vnd.com.example.app.provider.table1
内容提供器在 AndroidManifest.xml 文件中注册
<provider android:name="自定义内容提供器的全名" android:authorities="包名.provider" > </provider>
如何去访问自定义的内容提供器呢?
Uri uri = Uri.parse("content://com.example.app.provider/table1"); //查全部 ,到这一步就很熟悉了,遍历取出数据。 Cursor cursor = getContentResolver().query(uri, null, null,null, null);
相关文章推荐
- android 学习笔记 创建自己的内容提供器
- Androidc学习笔记五之四大组件之内容提供器ContentProvider
- Android基础学习之Provider(内容提供器)
- Android第一行代码学习笔记五----内容提供器
- Android学习-内容提供器 数据共享
- android学习十二(android的Content Provider(内容提供器)的使用)
- Android学习总结(九)———— 内容提供器(ContentProvider)
- Android学习第十天—跨程序共享数据(探究内容提供器)
- 【Android学习之道】 四大组件之ContentProvider内容提供器
- Android学习记录五(活动、服务、内容提供者、广播接收者)
- android 学习笔记 内容提供器ContentResolver
- android学习十二(android的Content Provider(内容提供器)的使用)
- Android学习11Android上的网络编程
- Android 内容提供器---内容提供器基础(概述)
- Android 内容提供器---简介
- Android 内容提供器---内容提供器基础(访问提供器)
- Android 内容提供器---内容提供器基础(概述)
- Android开发学习笔记(11):Android问题解决对策集(更新中...)
- Android 内容提供器---内容提供器基础(内容的统一资源标识(URIs))
- Android学习11--事件处理