已知的直接子类
|
课程概述
内容提供商是Android应用程序的主要构建块之一,提供内容到应用程序。它们封装数据并通过单个内容解析器
接口。只有当您需要共享时,才需要内容提供商多个应用程序之间的数据。例如,联系人数据由多个应用程序,并且必须存储在内容提供商中。如果您不需要在可以通过多个应用程序直接使用数据库数据操作
。
当通过发出请求时一内容解析器
系统检查给定URI的权限并传递向向授权机构注册的内容提供商发出请求。内容提供商可以解释URI的其余部分。这个UriMatcher公司
类有助于解析URI。
需要实施的主要方法有:
数据访问方法(例如插入(Uri,ContentValues)
和更新(Uri,ContentValues,String,String[])
)可以同时从多个线程调用,并且必须是线程安全的。其他方法(例如创建时()
)仅从应用程序调用主线程,并且必须避免执行冗长的操作。参见方法预期线程行为的描述。
请求内容解析器
自动转发给相应的ContentProvider实例,因此子类不必担心跨进程调用。
开发人员指南
有关使用内容提供程序的更多信息,请阅读内容提供商开发人员指南。
总结
内部类 |
接口 |
ContentProvider。管道数据写入器<T> |
接口将数据流写入管道。 |
公共建筑商 |
|
内容提供者()
构造一个ContentProvider实例。
|
公共建筑商
公众的
内容提供者
()
构造ContentProvider实例。内容提供商必须宣布在清单中,使用访问内容解析器
、和已创建由系统自动执行,因此应用程序通常不会创建ContentProvider实例。
在构造时,对象未初始化,大多数字段和方法不可用。子类应在中初始化自己创建时()
,而不是构造函数。
在应用程序主线程上创建内容提供程序应用程序启动时间。构造函数不能执行冗长的操作操作,否则应用程序启动将延迟。
公共方法
公众空隙
附件信息
(上下文上下文,提供商信息信息)
实例化后,调用这个函数来告诉内容提供者关于它自己。
参数
上下文
| 此提供程序正在运行的上下文 |
信息
| 有关此内容提供商的注册信息 |
公众整数
批量插入
(乌里uri,内容值[]值)
参数
uri(用户界面)
| 插入请求的content://URI。 |
值
| 要添加到数据库的column_name/value对集的数组。这一定不是无效的 。 |
调用提供程序定义的方法。这可用于实施对于类似桌子的界面来说,更便宜和/或更不自然模型。
警告:框架不进行权限检查除了应用程序的基本功能之外,还要考虑内容提供商的这一项根本无法访问提供商。例如,它不知道是否调用执行时可能会读取或写入提供程序中的数据,因此无法强制执行个人权限。此方法的任何实现必须对传入呼叫进行自己的权限检查,以确保它们被允许。
参数
方法
| 要调用的方法名。框架不透明,但不应不透明无效的 。 |
参数
| provider定义的String参数。可能是无效的 。 |
额外费用
| provider-defined Bundle参数。可能是无效的 。 |
退换商品
- 提供者定义的返回值。可能是
无效的
,这也是不实现任何调用方法的提供程序的默认值。
公众的乌里
规范化
(乌里网址)
实现此功能以支持引用您的内容提供商。规范URI是可以跨设备、备份/恢复和其他上下文,并且仍然能够引用到同一数据项。通常,这是通过添加查询来实现的URI的参数允许内容提供者验证传入的规范URI引用的数据与它最初用于和的数据相同,如果没有,则在当前环境中查找该数据(如果存在)。
例如,如果内容提供商包含人员和正常的URI是用人员数据库中的行索引创建的,即cananical表示可能在末尾有一个额外的查询参数,该参数指定它的目标用户。稍后使用该URI调用提供程序将显示向上显示URI的基索引行,如果不匹配或其条目name与查询参数中的名称不匹配,请对其数据库执行查询找到要操作的正确行。
如果实现对规范URI的支持,全部的来电URI(包括此URI)必须对任何他们接收的规范URI。此外,还必须实现非规范化(尿)
去除任何这些URI的规范化。
此方法的默认实现返回null,表示不支持规范URI。
退换商品
- 返回的规范表示网址,或null,如果不支持对该Uri进行规范化。
公众摘要整数
删除
(乌里uri,字符串选择,字符串[]选择Args)
实现此功能以处理删除一行或多行的请求。执行时应应用选择条款删除,允许操作影响目录中的多行。出于礼貌,请致电通知删除()
删除后。可以从多个线程调用此方法,如中所述过程和线程。
该实现负责在末尾解析出行ID如果要删除特定行,则返回URI。也就是说,客户会传入内容://联系人/人/22
实现是负责在创建SQL语句时解析记录编号(22)。
参数
uri(用户界面)
| 要查询的完整URI,包括行ID(如果请求特定记录)。 |
选择
| 删除时应用于行的可选限制。 |
将提供程序的状态打印到给定流中。如果运行“adb shell dumpsys activity provider<providercomponent_name>”。
参数
fd公司
| 转储发送到的原始文件描述符。 |
作家
| 您应该将状态转储到的PrintWriter。这将是你回来后就关门了。 |
参数
| 转储请求的其他参数。 |
公众最终的上下文
获取上下文
()
检索运行此提供程序的上下文。仅可用一次创建时()
已调用--这将返回无效的
在中构造函数。
公众最终的路径权限[]
获取路径权限
()
返回对的读和/或写访问所需的基于路径的权限此内容提供商。可以从多个螺纹,如中所述过程和线程。
公众最终的字符串
获取读取权限
()
返回只读访问所需的权限名称此内容提供商。可以从多个线程,如中所述过程和线程。
公众的字符串[]
获取流类型
(乌里uri,字符串mimeTypeFilter)
由客户端调用以确定此内容提供程序支持给定的URI。默认实现收益无效的
,表示没有类型。如果您的内容提供商存储数据对于特定类型,如果MIME类型与给定的mimeTypeFilter。如果它可以执行类型转换,则返回数组与mimeTypeFilter匹配的所有支持的MIME类型的。
参数
uri(用户界面)
| 正在查询的内容提供程序中的数据。 |
mimeType过滤器
| 客户需要的数据类型。可能是模式,例如*\/*,用于检索所有可能的数据类型。 |
退换商品
- 退换商品
无效的
如果没有可能的数据流给定的mimeTypeFilter。否则返回所有可用的数组具体的MIME类型。
公众摘要字符串
获取类型
(乌里uri)
实现此功能以处理对MIME类型数据的请求给定的URI。返回的MIME类型应以开头vnd.android.cursor.item公司
对于单个记录,或vnd.android.cursor.dir/
用于多个项目。可以从多个线程调用此方法,如中所述过程和线程。
请注意,应用程序不需要权限访问此信息;如果您的内容提供商要求阅读和/或写入权限,或者未导出,所有应用程序仍然可以调用此方法不考虑其访问权限。这使他们能够在调度意图时检索URI的MIME类型。
公众最终的字符串
获取写入权限
()
返回对的读/写访问所需的权限名称此内容提供商。可以从多个线程,如中所述过程和线程。
公众摘要乌里
插入
(乌里uri,内容值值)
实现此功能以处理插入新行的请求。出于礼貌,打电话通知更改()
插入后。可以从多个线程调用此方法,如中所述过程和线程。
参数
uri(用户界面)
| 插入请求的content://URI。这一定不是无效的 。 |
值
| 要添加到数据库的一组列名称/值对。这一定不是无效的 。 |
公众空隙
onConfigurationChanged(配置已更改)
(配置新配置)
当您的组件正在运行。注意,与活动不同,其他组件配置更改时从不重新启动:它们必须始终处理更改的结果,例如通过重新检索资源。
在调用此函数时,您的资源对象将被更新以返回与新配置。
有关更多信息,请阅读处理运行时更改。此方法始终在应用程序主线程上调用,并且必须不执行长时间的操作。
默认的内容提供程序实现不执行任何操作。重写此方法以采取适当的操作。(内容提供商通常不关心屏幕之类的东西方向,但可能想了解区域设置更改。)
公众摘要布尔值
创建时的回调函数
()
退换商品
- 如果提供程序成功加载,则为true,否则为false
公众空隙
在低内存上
()
这是在整个系统内存不足时调用的,并且主动运行的进程应该减少内存使用。While期间通常,调用该函数的确切点没有定义当所有后台进程都被终止时,就会发生这种情况。也就是说,在达到扼杀托管进程的地步之前我们希望避免杀戮的服务和前台UI。
您应该实现此方法以释放您可能持有的任何缓存或其他不必要的资源。从该方法返回后,系统将为您执行垃圾收集。
最好,您应该实现onTrimMemory(int)
从组件回调2
根据不同的内存需求的级别。该API可用于API级别14及更高级别,因此您应该只使用这个低内存()
方法作为旧版本的备用方法,可以是被视为onTrimMemory(int)
使用TRIM_MEMORY_COMPLETE(内存完整)
水平。
此方法始终在应用程序主线程上调用,并且必须不执行长时间的操作。默认的内容提供程序实现不执行任何操作。子类可以重写此方法以采取适当的操作。
公众空隙
onTrimMemory(调整内存)
(int级)
参数
uri(用户界面)
| 要打开其文件的URI。 |
模式
| 文件的访问模式。对于只读访问,可以是“r”,“w”表示只写访问(擦除当前中的任何数据文件),“wa”用于对任何现有数据进行追加的只读访问,“rw”表示对任何现有数据的读写访问,“rwt”表示读以及截断任何现有文件的写访问。 |
信号
| 取消正在进行的操作的信号,或无效的 如果没有。例如,如果您正在下载文件,以服务于“rw”模式请求应定期致电throwIf取消() 检查是否客户端已取消请求并中止下载。 |
退换商品
- 返回可用于访问的新AssetFileDescriptor文件。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问该文件的权限。 |
参数
uri(用户界面)
| 要打开其文件的URI。 |
模式
| 文件的访问模式。对于只读访问,可以是“r”,“w”表示只写访问(擦除当前中的任何数据文件),“wa”用于只写访问以附加到任何现有数据,“rw”表示对任何现有数据的读写访问,“rwt”表示读以及截断任何现有文件的写访问。 |
退换商品
- 返回可用于访问的新AssetFileDescriptor文件。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问该文件的权限。 |
参数
uri(用户界面)
| 要打开其文件的URI。 |
模式
| 文件的访问模式。对于只读访问,可以是“r”,“rw”表示读写访问,“rwt”表示读写入访问截断任何现有文件。 |
退换商品
- 返回可用于访问的新ParcelFileDescriptor文件。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问该文件的权限。 |
参数
uri(用户界面)
| 要打开其文件的URI。 |
模式
| 文件的访问模式。对于只读访问,可以是“r”,“w”表示只读访问,“rw”表示读写访问,或“rwt”用于截断任何现有的读写访问文件。 |
信号
| 取消正在进行的操作的信号,或无效的 如果没有。例如,如果您正在下载从网络发送文件以服务“rw”模式请求,您应定期致电throwIf取消() 检查是否客户端已取消请求并中止下载。 |
退换商品
- 返回可用于访问的新ParcelFileDescriptor文件。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问该文件的权限。 |
公众的地块文件描述符
openPipeHelper(打开管道助手)
(乌里uri,字符串mime类型,捆绑选项、T参数、,管道数据写入器<T> 功能)
参数
uri(用户界面)
| 要写入其数据的URI。 |
mime类型
| 要写入的所需数据类型。 |
opts选项
| 呼叫者提供的选项。 |
参数
| 您自己的自定义参数。 |
函数
| 实现实际功能的接口流式传输数据。 |
退换商品
- 返回一个新的ParcelFileDescriptor,其中包含管子。这应该返回给来电者阅读;来电者完成后负责关闭。
公众的资产文件描述符
打开类型资产文件
(乌里uri,字符串mimeTypeFilter,捆绑选项)
参数
uri(用户界面)
| 正在查询的内容提供程序中的数据。 |
mimeType过滤器
| 客户需要的数据类型。可能是模式,例如*\/*,如果调用方没有特定类型要求;在这种情况下,内容提供商将选择最好的与模式匹配的类型。 |
opts选项
| 来自客户端的其他选项。的定义这些特定于被调用的内容提供程序。 |
退换商品
- 返回客户端可以从中访问的新AssetFileDescriptor读取所需类型的数据。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问数据的权限。 |
非法数据异常
| 如果内容提供程序不支持请求的MIME类型。 |
公众的资产文件描述符
打开类型资产文件
(乌里uri,字符串mimeTypeFilter,捆绑选项,取消信号信号)
参数
uri(用户界面)
| 正在查询的内容提供程序中的数据。 |
mimeType筛选器
| 客户需要的数据类型。可能是模式,例如*\/*,如果调用方没有特定类型要求;在这种情况下,内容提供商将选择最好的与模式匹配的类型。 |
opts选项
| 来自客户端的其他选项。的定义这些特定于被调用的内容提供程序。 |
信号
| 取消正在进行的操作的信号,或无效的 如果没有。例如,如果您正在下载从网络发送文件以服务“rw”模式请求,您应定期致电throwIf取消() 检查是否客户端已取消请求并中止下载。 |
退换商品
- 返回客户端可以从中访问的新AssetFileDescriptor读取所需类型的数据。
投掷
文件未找到异常
| 如果存在,则引发FileNotFoundException没有与给定URI关联的文件或模式无效。 |
安全例外
| 如果调用方抛出SecurityException没有访问数据的权限。 |
非法数据异常
| 如果内容提供程序不支持请求的MIME类型。 |
实现此功能以处理来自客户端的查询请求。可以从多个线程调用此方法,如中所述过程和线程。
客户端调用示例:
//请求特定记录。游标managedCursor=managedQuery(ContentUris.withAppendedId(联系人.People.CONTENT_URI,2),投影,//返回哪些列。null,//WHERE子句。null,//WHERE子句值替换人。名称+“ASC”);//排序顺序。
实施示例:
//SQLiteQueryBuilder是创建//正确的SQL语法。SQLiteQueryBuilder qBuilder=新SQLiteQueryBuilder();//设置我们要查询的表。qBuilder.setTables(DATABASE_TABLE_NAME);//如果查询以特定的记录号结束,则//被要求提供特定记录,因此设置//查询中的WHERE子句。if((URI_MATCHER.match(URI))==特定消息){qBuilder.appendWhere(“_id=”+uri.getPathLeafId());}//进行查询。光标c=qBuilder.query(mDb,投影,选择,选择参数,分组依据,有,sortOrder);c.setNotificationUri(getContext().getContentResolver(),uri);返回c;
参数
uri(用户界面)
| 要查询的URI。这将是客户端发送的完整URI;如果客户端请求特定记录,URI将以记录号结尾实现应该解析并添加到WHERE或HAVING子句,指定id值。 |
投影
| 要放入光标的列的列表。如果无效的 包括所有列。 |
选择
| 筛选行时要应用的选择条件。如果无效的 则包括所有行。 |
选择参数
| 你可以包括在内吗?选择中的,将替换为selectionArgs中的值,以便它们出现在选择中。这些值将被绑定为字符串。 |
sortOrder(排序顺序)
| 游标中的行应如何排序。如果无效的 然后提供者可以自由定义排序顺序。 |
实现此功能以处理来自支持取消的客户端的查询请求。可以从多个线程调用此方法,如中所述过程和线程。
客户端调用示例:
//请求特定记录。游标managedCursor=managedQuery(ContentUris.withAppendedId(联系人.People.CONTENT_URI,2),投影,//返回哪些列。null,//WHERE子句。null,//WHERE子句值替换人。名称+“ASC”);//排序顺序。
实施示例:
//SQLiteQueryBuilder是创建//正确的SQL语法。SQLiteQueryBuilder qBuilder=新SQLiteQueryBuilder();//设置我们要查询的表。qBuilder.setTables(DATABASE_TABLE_NAME);//如果查询以特定的记录号结束,则//被要求提供特定记录,因此设置//查询中的WHERE子句。if((URI_MATCHER.match(URI))==特定消息){qBuilder.appendWhere(“_id=”+uri.getPathLeafId());}//进行查询。光标c=qBuilder.query(mDb,投影,选择,选择参数,分组依据,有,sortOrder);c.setNotificationUri(getContext().getContentResolver(),uri);返回c;
如果实现此方法,则还必须实现查询(Uri,String[],String,String[],String])
不需要取消确保在中的旧版本Android Framework上正确运行的信号取消信号过载不可用。
参数
uri(用户界面)
| 要查询的URI。这将是客户端发送的完整URI;如果客户端请求特定记录,URI将以记录号结尾实现应该解析并添加到WHERE或HAVING子句,指定该id值。 |
投影
| 要放入光标中的列的列表。如果无效的 包括所有列。 |
选择
| 筛选行时要应用的选择条件。如果无效的 然后包括所有行。 |
选择参数
| 你可以包括在内吗?选择中的,将替换为selectionArgs中的值,以便它们出现在选择中。这些值将被绑定为字符串。 |
sortOrder(排序顺序)
| 游标中的行应如何排序。如果无效的 然后提供者可以自由定义排序顺序。 |
取消信号
| 取消正在进行的操作的信号,或无效的 如果没有。如果操作被取消,则操作已取消异常 将被抛出执行查询时。 |
公众空隙
停堆,停堆
()
实现此操作以关闭ContentProvider实例。然后你可以在单元测试中调用此方法。
Android通常处理ContentProvider的启动和关闭自动。您不需要启动或关闭内容提供商。在ContentProvider上调用测试方法时,但是,ContentProvider实例会启动并在之后继续运行测试结束,即使后续测试实例化了另一个测试内容提供商。冲突的发展是因为这两个实例通常针对相同的底层数据源运行(例如sqlite数据库)。
实现shutDown()通过提供一种终止ContentProvider。此方法还可以防止内存泄漏从ContentProvider的多个实例化,它可以确保通过允许您完全清理测试来进行单元测试隔离进行下一次测试前进行固定。
公众的乌里
非标准化
(乌里网址)
从以前返回的规范URI中删除规范化规范化(Uri)
。例如,如果您的实现要添加用于规范化URI的查询参数,此方法可以简单地将任何URI上的查询参数。默认实现总是返回相同的网址那是传来的。
退换商品
- 返回的非规范表示形式网址,返回这个网址as-is表示无事可做,如果在中找不到由规范表示标识的数据当前环境。
公众摘要整数
更新
(乌里uri,内容值值,字符串选择,字符串[]选择Args)
实现此功能以处理更新一行或多行的请求。实现应更新与所选内容匹配的所有行根据提供的值映射设置列。出于礼貌,请致电通知更改()
更新后。可以从多个线程调用此方法,如中所述过程和线程。
参数
uri(用户界面)
| 要查询的URI。如果出现以下情况,则可能具有记录ID是特定记录的更新请求。 |
值
| 要在数据库中更新的一组列名称/值对。这一定不是无效的 。 |
选择
| 用于匹配要更新的行的可选筛选器。 |
受保护的方法
受保护的最终的地块文件描述符
打开文件帮助程序
(乌里uri,字符串模式)
参数
uri(用户界面)
| 要打开的URI。 |
模式
| 文件模式。对于只读访问,可以是“r”,“w”表示只写访问(擦除当前中的任何数据文件),“wa”用于对任何现有数据进行追加的只读访问,“rw”表示对任何现有数据的读写访问,“rwt”表示读以及截断任何现有文件的写访问。 |
受保护的最终空隙
设置路径权限
(路径权限[]权限)
更改在中读取和/或写入数据所需的基于路径的权限内容提供商。这通常是从清单中为您设置的首次创建提供程序时的信息。
受保护的最终空隙
设置读取权限
(字符串许可)
更改从内容读取数据所需的权限供应商。这通常是从清单信息中为您设置的首次创建提供程序时。
受保护的最终空隙
设置写入权限
(字符串许可)
更改读取和写入内容中数据所需的权限供应商。这通常是从清单信息中为您设置的首次创建提供程序时。