• 语法
  • 特性
  • 声明
  • 属性
    • androidauthorities
    • androidenabled
    • androidexported
    • androidgrantUriPermissions
    • androidicon
    • androidinitOrder
    • androidlabel
    • androidmultiprocess
    • androidname
    • androidpermission
    • androidprocess
    • androidreadPermission
    • androidsyncable
    • androidwritePermission

语法

"list"          android:enabled=["true" | "false"]          android:exported=["true" | "false"]          android:grantUriPermissions=["true" | "false"]          android:icon="drawable resource"          android:initOrder="integer"          android:label="string resource"          android:multiprocess=["true" | "false"]          android:name="string"          android:permission="string"          android:process="string"          android:readPermission="string"          android:syncable=["true" | "false"]          android:writePermission="string" >    . . .

特性

  • < provider >标签包含于 < application>下
  • < provider >标签可以包含< meta-data> < grant-uri-permission> < path-permission>标签

声明

声明一个Conteng Provider组建,content provider是一个由application管理的ContentProvider一个子类并且提供了结构化的数据访问方法。在应用程序中的所有content provider必须声明在Manifest文件中的< provider>标签下,需要注意一点的是:系统并不知道是否存在该content provider更不知道它是否运行。
只需要将你要实现的content provider声明为你应用程序的一部分就可以了,止于在当前应用程序中使用到的其他content provider是不需要声明的,直接使用它们就好了。
Android系统会根据content provider的authority 字符串保存一个该content provider的引用,并将其作为该content provider的URI的一部分。

 假设你需要访问一个提供了个人健康信息的content provider。为了实现这一点,调用ContentResolver.query()方法,并传入相应的URI参数即可,该参数标识了从该content provider获得数据

实例URI:content://com.example.project.healthcareprovider/nurses/rn
- content组合,指示了该URI是一个content URI并且指向一个content provider,
- com.example.project.healthcareprovider指示了该content provider他自己;Android系统会根据该authority查找到当前的content provider
- nurses/rn 这个字符串代表了路径,指示了有查询的数据存储在当前content provider中的什么位置。

需要注意一点的是:当我们在Manifest文件中的< provider>中声明content provider的时候,不能再android:name中包含URI中其他参数,只能声明authority。更加详细的,如何使用content provider,可以查阅API Guide

属性

android:authorities

列出一个或者多个由content provider的提供的URI的authorities。多个authorities由分号隔开。为了避免冲突,authority的命名规则应该遵循java的编码惯例(例如使用com.example.provider.cartoonprovider作为authority),通常情况authority的名字就是实现了provider的一个子类的名称。authority没有默认值,必须显式的指定。

android:enabled

该属性表明了该content provider是否可以被实例化

  • true –>可以被实例化
  • false –>不可以被实例化

默认情况下该属性值是true。< application>标签启用了他属于他自己的该属性,并且同样适用于被< application>包含的子标签;当然,content provider也被包含在内。< application > & < provider>中针对该属性的设置,必须同时为true(都为默认值)时,content provider才能够被启用。不论是< application > 还是< provider>中的任何一个该属性被设置为false,则该content provider不会被实例化,不会被启用。

android:exported

该属性指示了content provider是否可以被其他应用程序使用。

  • true ,代表该content provider可以被其他应用程序使用。其他所有的应用程序都可以通过该content provider提供的URI访问由该content provider提供的数据,在访问的时候,只需要遵循相应的权限就ok。
  • false,代表该content provider对其他应用程序来说是不可见的。将android:exported设置为false用用限制你的应用程序来访问由该content provider提供的数据,只有当应用程序的UID和该content provider的UID相同时,才可以访问。

当minSdkVersion或者targetSdkVersion小于16时该属性的默认值是true。当大于17时,该属性默认值为false。我们可以通过设置该属性的值为false或者通过访问权限来控制该content provider是否可以被其他应用程序使用

android:grantUriPermissions

该属性用于标识哪些没有数据访问权限的应用程式是否可以访问该数据。当该值为true时,并且有其他应用访问该content provider提供的数据是,依据readPermissionwritePermission中的规则给出限制。

  • true,代表可以获得权限,当访问该content provider的任意数据时,都会被授权。
  • false,代表不能获得权限,当访问该content provider的任意数据时,回依据< grant-uri-permission>子标签中的规则进行授权

默认值为false。
权限授权是一种给与某应用程序或者组建一次性访问受保护数据的一种策略。例如:当我们收到一封带有附件的电子邮件时,即便是用户没有给与email访问content provider数据的权限,email程序应该呈现给用户并打开它。
在大多数情况下,权限的授权通过在intent中指定FLAG_GRANT_READ_URI_PERMISSION FLAG_GRANT_WRITE_URI_PERMISSION标志来获取。例如上面的email应用程序,在发出打开附件的intent中应该指定FLAG_GRANT_READ_URI_PERMISSION 标志。
如果我们开启了当前的这个权限授权功能,不论是通过将该属性设置为true还是将其定义在< grant-uri-permission>标签中;当我们删除一些URI对应的资源时,必须要调用Context.revokeUriPermission()方法,详细参见< grant-uri-permission>标签

android:icon

设置content provider的图标资源。如果没有设置,则默认为< application>的图标

android:initOrder

对于处在同一进程中的不同content provider来说,该属性值代表了不同content provider之间的初始化顺序。当不同的content provider之间有相互依赖时,设置该属性之后,可以确保相互依赖的content provider被按照一定的顺序创建。该属性的值为整数,并且数值越大优先级越高

android:label

代表可读的content provider标签。如果该属性尚未设置,则默认为< application>的label标签。该属性的值为字符串,因此该属性同样也是可以参照不同的语言环境来进行切换的。但是为了方便开发,该属性通常被设置为一个常量的不可变的字符串

android:multiprocess

该content provider 是否可以被任意一个进程实例化(默认值为false)

  • true 代表该content provider可以运行在多个进程中
  • false 代表该content provider只能运行在一个进程中

通常情况content provider又其对应的application进行实例化。但如果将该属性设置为true,任意一个进程都可以创建一个content provider;贴别是需要在不同进程之间交互时;因此要尽量避免进程间通信的开销

android:name

该属性代表实现了content provider的类的名称,也就是ContentProvider的子类。该属性应该是一个类的全名称(例如:com.example.project.TransportationProvider)。但是当我们在< manifest>中指定了完整的包名。此时也可以使用.TransportationProvider来代替。
该属性没有默认值,必须指定

android:permission

读写该content provider数据的权限的名称。这个属性很方便的规定了读和写两种权限。但是readPermissionwritePermission的优先级要高于该属性的优先级。如果readPermission 设置的值,用于控制查询content provider的数据;writePermission设置的值,用于控制修改content provider的数据。

android:process

该content provide应该运行在哪个进程中。通常情况下application的所有组件都运行在一个由application创建的默认认的进程中。content provider的该属性值和application的相同。< application> 标签中的process属性可以左右其所有子组件的默认值,但是每个子组件同样是可以覆盖< application> 标签的该属性的。进而允许你的应用跨进程通信。如果这个分配的名称以冒号:开始,那么当它需要运行在哪个进程的时候,一个新的,私有的进程就被创建。如果这个进程名称以小写字母开始,那么这个provider将运行在全局进程中。这就允许这个进程在不同的应用中共享,进而降低对资源的消耗。

android:readPermission

客户端读取content provider数据所需的权限。

android:syncable

content provider的数据是否要和服务数据进行同步,若同步则为true,否则为false。”false” if not.

android:writePermission

客户端修改由content provider控制的数据时所需的权限。

更多相关文章

  1. API 23 inputmethodservice.KeyboardView——属性分析
  2. Android布局属性大全
  3. Android EditText 的 android:imeOptions 属性
  4. Android布局的一些属性值
  5. RelativeLayout用到的一些重要的属性
  6. Android布局文件layout.xml的一些属性值
  7. 相对布局中的一些常用属性
  8. 用EditText控件的属性inputType

随机推荐

  1. Android友盟多渠道打包_Gradle配置
  2. android使用CheckedTextView搭配listview
  3. 图片压缩保存读取操作
  4. ProgressBar播放动画
  5. Android(Java):focus
  6. Android 多媒体
  7. android打电话,接电话,挂电话过程
  8. 关于"match_parent"这个xml的布局设定值
  9. Android JNI介绍
  10. 2011.11.22——— android jni简单用法