上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下属性应用
<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属性可以对所有应用组件设置不同的默认值。然而每个组件自身可以通过process属性重写这个默认值,进而允许你的应用跨进程通信。
如果这个分配的名称以冒号(:)开始,那么当它需要运行在哪个进程的时候,一个新的,私有的进程就被创立。如果这个进程名称以小写字母开始,那么这个provider将运行在全局进程中。这就允许这个进程在不同的应用中共享,进而降低对资源的消耗。
android:readPermission
客户端读取content provider数据所需的权限。
android:syncable
是不是content provider控制的属于要和服务数据进行同步,若同步则为true,否则为false。
android:writePermission
客户端修改由content provider控制的数据时所需的权限。
API Level 1
文章结束给大家分享下程序员的一些笑话语录: 一个程序员对自己的未来很迷茫,于是去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的"
于是他去问Lippman。
Lippman说"程序员的未来就是驾驭程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的"
于是他去问Gates。
Gates说"程序员的未来就是榨取程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
于是他去问侯捷。
侯捷说"程序员的未来就是诱惑程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝摇摇头"唉,我的孩子,你还是别当程序员了")