Android Manifest之<provider>元素中文注释
语法
<provider android:authorities="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>
子元素
<meta-data>
<grant-uri-permission>
<path-permission>
描述
声明content provider组件。Content provider是ContentProvider的子类,这个ContentProvider提供了对由应用管理的数据的结构化访问。在应用中的所有content provider都必须在manifest文件中通过<provider>元素进行声明;否则系统就不知道它也不会运行它。
你只能定义content provider作为一个你应用的一部分。在你的应用中使用的其它应用的content provider不应被定义。
Android系统根据authority串储存一个到content provider的引用,也就是provider的content URI部分。例如,加入你想通过content provider访问关于健康保健专业的信息。为了做这件事,你就需要调用方法ContentResolver.query(),在这个方法中,除了其它参数之外,还要传递标识了这个提供者的URI:
content://com.example.project.healthcareprovider/nurses/rn
这个content: scheme表示这个URI将作为内容URI指向Android content provider。而authoritycom.example.project.healthcareprovider则指明了这个provider自身;那么Android系统就在它们已知的providers和authorities列表中进行查找这个authority。子串nurses/rn是path,content provider就用它来标识这个提供者数据的子集。
注意,当你在<provider>元素中定义你的provider时,在android:name的参数中你不用包含这个scheme或path,而只需要authority。
更多关于使用content provider的信息,参见API向导,Content Providers。
属性
android:authorities
一个或多个URI authorities,这些authorities表示了由content provider提供的数据。多个authroities用它们的名字以分号(;)隔开。为了避免冲突,authority名称应当使用java风格的命名规范(例如,“com.example.provider.cartoonprovider”)。最典型的做法就是,它是实现这个provider的ContentProvider子类的名称。
这个属性没有默认值,至少必须指定一个authority。
android:enabled
是否这个content provider能由系统初始化-如果能则为true,否则为false。默认为true。
<application>元素有它自身的应用到所有组件的enabled属性,包括content provider。要让这个content provider启用,<application>和<provider>的enabled属性都必须为true。如果有一个为false,这个provider就被disabled;那么它就不能实例化。
android:exported
是否这个content provider对其它应用是可以使用的:
·true:这个provider对其它应用可用。任何应用都能使用这个provider的content URI和受这个provider指定的permission来访问它。
·false:这个provider对其它应用不可用。设置android:exported=false将限制到你应用的provider的访问。作为provider来说,只有同一个用户ID(UID)的应用才能访问它。
对将android:minSdkVersion或android:targetSdkVersion设置为16或以下的应用这个默认值为true。对于将这些属性设置为17或更高的应用这个默认值为false。
你能通过android:exported=false和用permission设置属性来限制访问你应用的provider。
android:grantUriPermissions
是否哪些原来没有权限访问content provider数据的组件能授权使用这个provider,临时性的使用readPermission、writePermission和permission属性来忽略这个限制-如果权限能授予则为true,否则为false。如果为true,那么权限能被授予任何content provider的数据。如果为false,如果有的话,那么权限只能被授予在<grant-uri-permission>子元素中列出的数据子集。默认是false。
授权是指给应用组件一次访问由权限保护的数据的方式。例如,当电子邮件包含附件,即使这个视图没有查看所有content providers属性的一般权限,这个电子邮件应用也可以调用对应的视图打开它。
在这种情况下,权限由启动组件的intent 对象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标记来授权。例如,电邮应用可以将FLAG_GRANT_READ_URI_PERMISSION放入intent对象中传递给Context.startActivity。在这个intent中这个对这个URI的权限就被指定。
如果你通过将这个属性设置为true或定义<grant-uri-permission>子元素开启了这个功能,那么当URI从provider删除时,你必须调用Context.revokeUriPermission()。
android:icon
这个content provider呈现的图标。这个属性必须设置为包含图片的drawable资源的引用。如果没有设置,由application指定的图标就会代替它(参见<application>元素的icon属性)。
android:initOrder
相对于同一个进程中的其它content provider来说,这个 content provider初始化的顺序。当在content providers之间有依赖关系时,为它们当中的每一个设置这个属性可以确保它们按照那些依赖需要的顺序被创建。这个值是整数,数字越大越优先。
android:label
用户可读的content provider的标签。如果这个属性没有设置,那么这个application的标签就会代替它(参见<application>元素的label属性)。
这个标签应该设置为string资源的引用,以便它能像其它string资源一样在用户接口中本地化。然而,为了方便起见,当你开发应用时,它也能设置为raw串。
android:multiprocess
是否这个content provider的实例能在每个客户端中被创建-如果这个实例能在多个进程中创建则为true,否则为false,默认为false。
一般来说,content provider只能在定义它的应用中初始化。然而,如果这个标记设为true,那么系统就能在每个客户端需要和它交互的进程中创建一个实例,因此,需要尽力避免进程之间通信开销。
android:name
实现这个content provider类的名称,也就是ContentProvider的子类。这应该是完整的类名(如,“com.example.project.TransportationProvider”)。然而,作为一种简写的方式,如果这个名称的第一个字母是(如“.TransportationProvider”),那么它就会自动追加到manifest中定义的包名的后面。
这个属性没有默认值,必须指定。
android:permission
客户端读写content provider数据所需的权限的名称。这个属性单独设置读和写来说是一种方便的方式。然而,readPermission和writePermission属性优先于这个属性。如果readPermission属性也设置,那么它就控制对content provider的查询。如果writePermission属性也设置,那么它就控制对content provider的修改。
android:process
这个content provider运行的进程的名称。一般来说,所有组件都应当运行由它所在应用创建的默认进程中。和应用的包名一样。<application>元素的process属性可以对所有应用组件
补充:移动开发 , Android ,