Android中ContentProvider组件详解
来源:互联网 发布:淘宝药品 编辑:程序博客网 时间:2024/05/17 04:23
Android中ContentProvider组件详解
1. ContentProvider
ContentProvider(内容提供者)是Android的4大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,
其他应用程序通过ContentResolver来对其共享的的数据进行增删改查操作。
ContentProvider分为系统的和自定义的,系统的有例如联系人、相册图片等数据。
Google Doc中对ContentProvider的大概描述如下:
内容提供者将一些特定的应用程序数据提供给其他应用程序使用。内容提供者继承与ContentProvider基类,为其他应用程序取用和存储它管理的数据实现了一套标准方法。
然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver对象,调用它的方法作为替代。ContentResolver可以喝任意内容提供者进行会话,
与其合作来对所有相关交互通讯进行管理。
Android 提供了一些主要数据类型的ContentProvider, 例如音频、视频、图片和通讯录等。通过获得这些ContentProvider可以查询它们包含的数据,
前提是已获得适当的读取权限。
主要方法如下:
public boolean onCreate() 在创建ContentProvider时调用
public Cursor query(Uri, String[], String, String[], String) 用于查询指定Uri的ContentProvider,返回一个Cursor
public Uri insert(Uri, ContentValues) 用于添加数据到指定Uri的ContentProvider中
public int update(Uri, ContentValues, String, String[]) 用于更新指定Uri的ContentProvider中的数据
public int delete(Uri, String, String[]) 用于从指定Uri的ContentProvider中删除数据
public String getType(Uri) 用于返回指定的Uri中的数据的MIME类型
*如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头。
例如:要得到所有person记录的Uri为content://contacts/person,那么返回的MIME类型字符串为"vnd.android.cursor.dir/person"。
*如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头。
例如:要得到id为10的person记录的Uri为content://contacts/person/10,那么返回的MIME类型字符串应为"vnd.android.cursor.item/person"。
2. ContentResolver
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,
要获得ContentResolver对象,可以使用Context提供的getContentResolver()方法。
ContentResolver cr = getContentResolver();
public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定Uri的ContentProvider中。
public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定Uri的ContentProvider中删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用于更新指定Uri的ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用于查询指定Uri的ContentProvider。
3. Uri
Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
第一部分是"content://"。可以看作是网址中的"http://"。
第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名,比如"blog.csdn.net"。
第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。
假设有A、B两个应用程序,我想让A共享一些数据出来给B可以使用。
那么A程序:
1、实现一个ContentProvider的子类,并重写query,insert,update,delete等这几个方法
2、在androidmanifest.xml中注册ContentProvider,指定的android:authorities属性;
然后B程序就要通过ContentResolver来操作A程序共享出来数据:
1、通过Context的getContentResolver()方法获取ContentResolver对象;
2、通过ContentResolver对象来query、insert、update、delete来进行操作;
在实现query,insert,update,delete时有一个重要的参数Uri类,Uri一个中要的方法Uri.parse(String str)用来解析str字符串,而str字符串格式一般都有A程序提供给B程序,B程序按照指定的格式去请求 。比如:content//:com.android.xiong.ConentProviderTestA.firstContentProvider/xiong 其格式一般分为三个部分:content//:这部分是固定不变的 而com.android.xiong.ConentProviderTestA.firstContentProvider表A程序在androidmanifest.xml注册的android:authorities属性,xiong则表示资源部分。
<span style="font-size:12px;"> <provider android:name="com.android.xiong.conentprovidertesta.FirstContentProvider" android:authorities="com.android.xiong.ConentProviderTestA.firstContentProvider" android:exported="true" > </provider> </span>
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- Android中ContentProvider组件详解
- 【Android】Android中ContentProvider组件详解
- android四大组件--ContentProvider详解
- android四大组件--ContentProvider详解
- Android组件:ContentProvider实例详解
- android四大组件--ContentProvider详解
- android四大组件--ContentProvider详解
- android四大组件--ContentProvider详解
- 记录
- 读代码整洁之道 clean code一些命名规则
- Android原生json类org.json.JSONObject初步使用
- 安装collectl
- Hello world
- Android中ContentProvider组件详解
- AFNetWorking 中使用HTTPS
- 有关使用tableview的问题
- iOS横向滚动的scrollView和系统pop手势返回冲突的解决办法
- mysql常用语句
- 电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等
- 如何用Mac自带QuckTime软件录制屏幕及声音
- maven搭建SSH的pox.xml文件
- linux虚拟地址空间你真的理解了吗?