phr*_*eed 2 android android-contentresolver android-contentprovider
这是一个很神奇的问题.我理解对ContentResolver方法的调用需要一个特定于ContentProvider的URI,但android如何实际建立关联?
我猜测任何与AndroidManifest.xml中的ContentProvider提供的权限相匹配的URI都会涉及到.请求是否发送到包含该权限的每个提供商?如果我尝试创建其权限前缀为另一个权限的提供程序将是一个问题?
有没有办法看看ContentProvider是否正在运行?我想也许getType()方法的虚拟响应可能表示活跃.
类ContentResolver维护从内容权限到ContentProvider类的映射.该映射的数据来自<provider>各种已安装应用程序的AndroidManifest.xml文件的元素.ContentResolver使用此映射来标识哪个Provider类是用于给定URI的正确类.将ContentResolver视为类似于DNS.它确定哪个服务器(提供者)是回答您的查询的正确服务器.
只有一个ContentProvider匹配,因为contentAuthorities(内容的"域名"部分:类型uri)必须是唯一的.它们不是等级的.将它们视为必须完全匹配的唯一字符串.它们看起来是分层的原因是允许一种简单的方法来保证唯一性,类似于确保Java包名称独特的方式.
根据标签文档的"描述:"部分:
Android系统通过内容的权限部分识别内容提供者:URI.例如,假设将以下URI传递给ContentResolver.query():
content://com.example.project.healthcareprovider/nurses/rn内容:方案将数据标识为属于内容提供者,并且权限(com.example.project.healthcareprovider)标识特定提供者.因此,权威必须是独一无二的.通常,在此示例中,它是ContentProvider子类的完全限定名称.内容提供程序可以使用URI的路径部分来标识特定数据子集,但这些路径未在清单中声明
至于当你使一个提供者的contentAuthority与另一个提供者相同时会发生什么......好吧,东西会中断.具体来说,它将拒绝安装第二个包装,说:
WARN/PackageManager:无法安装,因为com.zzz已经使用了提供程序名称com.xxx.Provider(在com.xxx包中)
所以....不要这样做.
无法查看ContentProvider是否正在运行.它根据需要由ContentResolver自动启动和停止.当您开始请求特定contentAuthority时,如果关联的提供程序尚未运行,则将启动它们.它将由ContentResolver自动停止,一段时间后它将处于空闲状态,并且看起来可能暂时不需要它.
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |