原文作者: 冷风の傲
转帖自:http://my.eoe.cn/1087692/archive/5927.html 感谢作者的分享
<?xmlversion="1.0"encoding="utf-8"?> <manifest> <application> <activity> <intent-filter> <action/> <category/> </intent-filter> </activity> <activity-alias> <intent-filter></intent-filter> <meta-data/> </activity-alias> <service> <intent-filter></intent-filter> <meta-data/> </service> <receiver> <intent-filter></intent-filter> <meta-data/> </receiver> <provider> <grant-uri-permission/> <meta-data/> </provider> <uses-library/> </application> <uses-permission/> <permission/> <permission-tree/> <permission-group/> <instrumentation/> <uses-sdk/> <uses-configuration/> <uses-feature/> <supports-screens/> </manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.woody.test" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > </manifest>
2.11 xmlns:android
定义android命名空间,一般为 http://schemas.android.com/apk/res/android ,这样使得 Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
2.12 package
指定本应用内java主程序包的包名,它也是一个应用进程的默认名称
2.13 sharedUserId
表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
* 在2个APK的AndroidManifest.xml 配置User ID:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.demo.a1" android:sharedUserId="com.c">
这个设定好之后, APK B就可以像打开本地数据库那样 打开APK A中的数据库了.这个"com.c" 就是user id, 然后packagename APK A就是上面的内容, APK B可能是"com.android.demo.b1" 这个没有限制APK A把登陆信息存放在A的数据目录下面. APK B每次启动的时候读取APK A下面的数据库判断是否已经登陆:APK B中的代码:
friendContext = this.createPackageContext( "com.android.demo.a1", Context.CONTEXT_IGNORE_SECURITY);
通过A的package name 就可以得到A的 packagecontext通过这个context就可以直接打开数据库
2.14 sharedUserLabel
一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
2.15 versionCode
是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等
2.16 versionName
这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等
2.17 installLocation
安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal
<application android:allowClearUserData=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:backupAgent="string" android:debuggable=["true" | "false"] android:description="string resource" android:enabled=["true" | "false"] android:hasCode=["true" | "false"] android:icon="drawable resource" android:killAfterRestore=["true" | "false"] android:label="string resource" android:manageSpaceActivity="string" android:name="string" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" > </application>
2.21 android:allowClearUserData('true' or 'false')
2.22 android:allowTaskReparenting('true' or 'false')
2.23 android:backupAgent
2.24 android:debuggable
2.25 android:description/android:label
2.26 android:enabled
2.27 android:hasCode('true' or 'false')
2.28 android:icon
2.29 android:killAfterRestore
2.210 android:manageSpaceActivity
2.211 android:name
2.212 android:permission
2.213 android:presistent
2.214 android:process
2.215 android:restoreAnyVersion
2.216 android:taskAffinity
2.217 android:theme
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "orientation", "screenLayout", "fontScale", "uiMode"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"] android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:permission="string" android:process="string" android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nosensor"] android:stateNotNeeded=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > </activity>
(注:有些在application中重复的就不多阐述了)
2.31 android:alwaysRetainTaskState
2.32 android:clearTaskOnLaunch
2.33 android:configChanges
2.34 android:excludeFromRecents
2.35 android:finishOnTaskLaunch
2.36 android:launchMode(Activity加载模式)
2.37 android:multiprocess
package="com.android.providers.telephony" android:sharedUserId="android.uid.phone"> android:allowClearUserData="false" android:label="Dialer Storage" android:icon="@drawable/ic_launcher_phone"> android:authorities="telephony" android:multiprocess="true" />
这个里面通过android:sharedUserId="android.uid.phone"android:process="com.android.phone"声明了该CP是和phone进程同属一个进程,拥有同样的process name和uid.如果没有上述声明,那么该CP是在独立的进程中,拥有属于自己的process name和uid.以上两种用法可以总结为:
1)CP和某个进程同属一个进程
这种情况下,当该进程启动时,会搜索属于该进程的所有CP,并加载。
2)CP属于独立的一个进程。
这种情况下,只有需要用到该CP时,才会去加载。
那么,当一个进程想要操作一个CP时,先需要获取该CP的对象,系统是如何处理呢:
1)如果该CP属于当前主叫进程,因为在进程启动时就已经加载过了,所以系统会直接返回该CP的对象。
2)如果该CP不属于当前主叫进程,那么系统会进行相关处理(由ActivityManagerService进行,以下简称为AMS):
所有已加载的CP信息都已保存在AMS中。当需要获取某个CP的对象时,AMS会先判断该CP是否已被加载
----如果已被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要通过IPC机制进行调用。
----如果还未被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要先创建该CP所在的进程,然后再通过IPC机制进行调用。
2.38 android:noHistory
2.39 android:screenOrientation
2.310 android:stateNotNeeded
2.311 android:windowSoftInputMode
<intent-filter android:icon="drawable resource" android:label="string resource" android:priority="integer" > <action /> <category /> <data /> </intent-filter>
2.41 intent-filter属性
android:priority(解释:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高)Intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作
2.42 action属性
String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式。
"android.intent.action.ADD_SHORTCUT" String ALL_APPS_ACTION 动作:
列举所有可用的应用。
"android.intent.action.ALL_APPS" String ALTERNATIVE_CATEGORY 类别:
说明 activity 是用户正在浏览的数据的一个可选操作。输入:无。
"android.intent.category.ALTERNATIVE" String ANSWER_ACTION 动作:
处理拨入的电话。
"android.intent.action.ANSWER" String BATTERY_CHANGED_ACTION 广播:
充电状态,或者电池的电量发生变化。
"android.intent.action.BATTERY_CHANGED" String BOOT_COMPLETED_ACTION 广播:
在系统启动后,这个动作被广播一次(只有一次)。
"android.intent.action.BOOT_COMPLETED" String BROWSABLE_CATEGORY 类别:
能够被浏览器安全使用的 activities 必须支持这个类别。
"android.intent.category.BROWSABLE" String BUG_REPORT_ACTION 动作:
显示 activity 报告错误。
"android.intent.action.BUG_REPORT" String CALL_ACTION 动作:
拨打电话,被呼叫的联系人在数据中指定。
"android.intent.action.CALL" String CALL_FORWARDING_STATE_CHANGED_ACTION 广播:
语音电话的呼叫转移状态已经改变。
"android.intent.action.CFF" String CLEAR_CREDENTIALS_ACTION 动作:
清除登陆凭证 (credential)。
"android.intent.action.CLEAR_CREDENTIALS" String CONFIGURATION_CHANGED_ACTION
广播:设备的配置信息已经改变。
String DATA_ACTIVITY_STATE_CHANGED_ACTION 广播:
电话的数据活动(data activity)状态(即收发数据的状态)已经改变。 "android.intent.action.DATA_ACTIVITY" String DATA_CONNECTION_STATE_CHANGED_ACTION 广播:电话的数据连接状态已经改变。
"android.intent.action.DATA_STATE" String DATE_CHANGED_ACTION 广播:
日期被改变。
"android.intent.action.DATE_CHANGED" String DEFAULT_ACTION 动作:
和 VIEW_ACTION 相同,是在数据上执行的标准动作。
"android.intent.action.VIEW" String DEFAULT_CATEGORY 类别:
如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别。 "android.intent.category.DEFAULT" String DELETE_ACTION 动作:
从容器中删除给定的数据。
"android.intent.action.DELETE" String DEVELOPMENT_PREFERENCE_CATEGORY 类别:
说明 activity 是一个设置面板 (development preference panel). "android.intent.category.DEVELOPMENT_PREFERENCE" String DIAL_ACTION 动作:
拨打数据中指定的电话号码。
"android.intent.action.DIAL String EDIT_ACTION 动作:
为制定的数据显示可编辑界面。
"android.intent.action.EDIT" String EMBED_CATEGORY 类别:
能够在上级(父)activity 中运行。
"android.intent.category.EMBED" String EMERGENCY_DIAL_ACTION 动作:
拨打紧急电话号码。
"android.intent.action.EMERGENCY_DIAL" int FORWARD_RESULT_LAUNCH 启动标记:
如果这个标记被设置,而且被一个已经存在的 activity 用来启动新的 activity,已有 activity 的回复目标 (reply target) 会被转移给新的 activity。
16 0x00000010 String FOTA_CANCEL_ACTION 广播:
取消所有被挂起的 (pending) 更新下载。
"android.server.checkin.FOTA_CANCEL" String FOTA_INSTALL_ACTION 广播:
更新已经被确认,马上就要开始安装。
"android.server.checkin.FOTA_INSTALL" String FOTA_READY_ACTION 广播:
更新已经被下载,可以开始安装。
"android.server.checkin.FOTA_READY" String FOTA_RESTART_ACTION 广播:
恢复已经停止的更新下载。
"android.server.checkin.FOTA_RESTART" String FOTA_UPDATE_ACTION 广播:
通过 OTA 下载并安装操作系统更新。
"android.server.checkin.FOTA_UPDATE" String FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY 类别:
作为代码框架下仪器的测试。
"android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" String GADGET_CATEGORY 类别:这个 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。 "android.intent.category.GADGET" String GET_CONTENT_ACTION 动作:
让用户选择数据并返回。
"android.intent.action.GET_CONTENT" String HOME_CATEGORY 类别:
主屏幕 (activity),设备启动后显示的第一个 activity。
"android.intent.category.HOME" String INSERT_ACTION 动作:
在容器中插入一个空项 (item)。
"android.intent.action.INSERT" String INTENT_EXTRA 附加数据:
和PICK_ACTIVITY_ACTION 一起使用时,说明用户选择的用来显示的 activity;
和ADD_SHORTCUT_ACTION 一起使用的时候,描述要添加的快捷方式。 "android.intent.extra.INTENT" String LABEL_EXTRA 附加数据:
大写字母开头的字符标签,和 ADD_SHORTCUT_ACTION 一起使用。
"android.intent.extra.LABEL" String LAUNCHER_CATEGORY 类别:
Activity 应该被显示在顶级的launcher 中。
"android.intent.category.LAUNCHER" String LOGIN_ACTION 动作:
获取登录凭证。
"android.intent.action.LOGIN" String MAIN_ACTION 动作:
作为主入口点启动,不需要数据。
"android.intent.action.MAIN" String MEDIABUTTON_ACTION 广播:
用户按下了“Media Button”。
"android.intent.action.MEDIABUTTON" String MEDIA_BAD_REMOVAL_ACTION 广播:
扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)。 "android.intent.action.MEDIA_BAD_REMOVAL" String MEDIA_EJECT_ACTION 广播:
用户想要移除扩展介质(拔掉扩展卡)。
"android.intent.action.MEDIA_EJECT" String MEDIA_MOUNTED_ACTION 广播:
扩展介质被插入,而且已经被挂载。
"android.intent.action.MEDIA_MOUNTED" String MEDIA_REMOVED_ACTION 广播:
扩展介质被移除。
"android.intent.action.MEDIA_REMOVED" String MEDIA_SCANNER_FINISHED_ACTION 广播:
已经扫描完介质的一个目录。
"android.intent.action.MEDIA_SCANNER_FINISHED" String MEDIA_SCANNER_STARTED_ACTION 广播:
开始扫描介质的一个目录。
"android.intent.action.MEDIA_SCANNER_STARTED" String MEDIA_SHARED_ACTION 广播:
扩展介质的挂载被解除 (unmount),因为它已经作为 USB 大容量存储被共享。 "android.intent.action.MEDIA_SHARED" String MEDIA_UNMOUNTED_ACTION 广播:
扩展介质存在,但是还没有被挂载 (mount)。
"android.intent.action.MEDIA_UNMOUNTED" String MESSAGE_WAITING_STATE_CHANGED_ACTION 广播:
电话的消息等待(语音邮件)状态已经改变。
"android.intent.action.MWI" int MULTIPLE_TASK_LAUNCH 启动标记:
和 NEW_TASK_LAUNCH 联合使用,禁止将已有的任务改变为前景任务 (foreground)。
8 0x00000008 String NETWORK_TICKLE_RECEIVED_ACTION 广播:
设备收到了新的网络 "tickle" 通知。
"android.intent.action.NETWORK_TICKLE_RECEIVED" int NEW_TASK_LAUNCH 启动标记:
设置以后,activity 将成为历史堆栈中的第一个新任务(栈顶)。
4 0x00000004 int NO_HISTORY_LAUNCH 启动标记:
设置以后,新的 activity 不会被保存在历史堆栈中。
1 0x00000001 String PACKAGE_ADDED_ACTION 广播:
设备上新安装了一个应用程序包。
"android.intent.action.PACKAGE_ADDED" String PACKAGE_REMOVED_ACTION 广播:
设备上删除了一个应用程序包。
"android.intent.action.PACKAGE_REMOVED" String PHONE_STATE_CHANGED_ACTION 广播:
电话状态已经改变。
"android.intent.action.PHONE_STATE" String PICK_ACTION 动作:
从数据中选择一个项目 (item),将被选中的项目返回。
"android.intent.action.PICK" String PICK_ACTIVITY_ACTION 动作:
选择一个activity,返回被选择的 activity 的类(名)。
"android.intent.action.PICK_ACTIVITY" String PREFERENCE_CATEGORY 类别:
activity是一个设置面板 (preference panel)。
"android.intent.category.PREFERENCE" String PROVIDER_CHANGED_ACTION 广播:
更新将要(真正)被安装。
"android.intent.action.PROVIDER_CHANGED" String PROVISIONING_CHECK_ACTION 广播:
要求 polling of provisioning service 下载最新的设置。 "android.intent.action.PROVISIONING_CHECK" String RUN_ACTION 动作:
运行数据(指定的应用),无论它(应用)是什么。
"android.intent.action.RUN" String SAMPLE_CODE_CATEGORY 类别:
作为一个示例代码例子(不是普通用户体验的一部分)。 "android.intent.category.SAMPLE_CODE" String SCREEN_OFF_ACTION 广播:
屏幕被关闭。
"android.intent.action.SCREEN_OFF" String SCREEN_ON_ACTION 广播:
屏幕已经被打开。
"android.intent.action.SCREEN_ON" String SELECTED_ALTERNATIVE_CATEGORY 类别:
对于被用户选中的数据,activity 是它的一个可选操作。 "android.intent.category.SELECTED_ALTERNATIVE" String SENDTO_ACTION 动作:
向 data 指定的接收者发送一个消息。
"android.intent.action.SENDTO" String SERVICE_STATE_CHANGED_ACTION 广播:
电话服务的状态已经改变。
"android.intent.action.SERVICE_STATE" String SETTINGS_ACTION 动作:
显示系统设置。输入:无。
"android.intent.action.SETTINGS" String SIGNAL_STRENGTH_CHANGED_ACTION 广播:
电话的信号强度已经改变。
"android.intent.action.SIG_STR" int SINGLE_TOP_LAUNCH 启动标记:
设置以后,如果 activity 已经启动,而且位于历史堆栈的顶端,将不再启动(不重新启动) activity。 2 0x00000002 String STATISTICS_REPORT_ACTION 广播:
要求 receivers 报告自己的统计信息。
"android.intent.action.STATISTICS_REPORT" String STATISTICS_STATE_CHANGED_ACTION 广播:
统计信息服务的状态已经改变。
"android.intent.action.STATISTICS_STATE_CHANGED" String SYNC_ACTION 动作:
执行数据同步。
"android.intent.action.SYNC" String TAB_CATEGORY 类别:
这个 activity 应该在 TabActivity 中作为一个 tab 使用。
"android.intent.category.TAB" String TEMPLATE_EXTRA 附加数据:
新记录的初始化模板。
"android.intent.extra.TEMPLATE" String TEST_CATEGORY 类别:
作为测试目的使用,不是正常的用户体验的一部分。
"android.intent.category.TEST" String TIMEZONE_CHANGED_ACTION 广播:
时区已经改变。
"android.intent.action.TIMEZONE_CHANGED" String TIME_CHANGED_ACTION 广播:
时间已经改变(重新设置)。
"android.intent.action.TIME_SET" String TIME_TICK_ACTION 广播:
当前时间已经变化(正常的时间流逝)。
"android.intent.action.TIME_TICK" String UMS_CONNECTED_ACTION 广播:
设备进入 USB 大容量存储模式。
"android.intent.action.UMS_CONNECTED" String UMS_DISCONNECTED_ACTION 广播:
设备从 USB 大容量存储模式退出。
"android.intent.action.UMS_DISCONNECTED" String UNIT_TEST_CATEGORY 类别:
应该被用作单元测试(通过 test harness 运行)。
"android.intent.category.UNIT_TEST" String VIEW_ACTION 动作:
向用户显示数据。
"android.intent.action.VIEW" String WALLPAPER_CATEGORY 类别:
这个 activity 能过为设备设置墙纸。
"android.intent.category.WALLPAPER" String WALLPAPER_CHANGED_ACTION 广播:
系统的墙纸已经改变。
"android.intent.action.WALLPAPER_CHANGED" String WALLPAPER_SETTINGS_ACTION 动作:
显示选择墙纸的设置界面。输入:无。
"android.intent.action.WALLPAPER_SETTINGS" String WEB_SEARCH_ACTION 动作:
执行 web 搜索。
"android.intent.action.WEB_SEARCH" String XMPP_CONNECTED_ACTION 广播:
XMPP 连接已经被建立。
"android.intent.action.XMPP_CONNECTED" String XMPP_DISCONNECTED_ACTION 广播:
XMPP 连接已经被断开。
2.43 category属性
D、data属性 <data android:host="string" android:mimeType="string" android:path="string" android:pathPattern="string" android:pathPrefix="string" android:port="string" android:scheme="string"/> ```【1】每个<data>元素指定一个URI和数据类型(MIME类型)。 它有四个属性scheme、host、port、path对应于URI的每个部分: scheme://host:port/path scheme的值一般为"http",host为包名,port为端口号,path为具体地址。如:http://com.test.project:200/folder/etc 其中host和port合起来构成URI的凭据(authority),如果host没有指定,则port也会被忽略 要让authority有意义,scheme也必须要指定。要让path有意义,scheme+authority也必须要指定 【2】mimeType(指定数据类型),若mimeType为'Image',则会从content Provider的指定地址中获取image类型的数据。还有'video'啥的,若设置为video/mp4,则表示在指定地址中获取mp4格式的video文件 【3】而pathPattern和PathPrefix主要是为了格式化path所使用的 ```java 5、第四层<meta-data> <meta-data android:name="string" android:resource="resource specification" android:value="string"/> ```这是该元素的基本结构.可以包含在<activity> <activity-alias> <service> <receiver>四个元素中。 android:name 解释:元数据项的名字,为了保证这个名字是唯一的,采用java风格的命名规范, 如com.woody.project.fried android:resource 解释:资源的一个引用,指定给这个项的值是该资源的id。该id可以通过方法Bundle.getInt()来从meta-data中找到。 android:value 解释:指定给这一项的值。可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean] ```java 6、第三层<activity-alias>属性 <activity-alias android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:targetActivity="string"> <intent-filter/> <meta-data/> </activity-alias> <activity-alias>是为activity创建快捷方式的,如下实例: <activity android:name=".shortcut"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity-alias android:name=".CreateShortcuts" android:targetActivity=".shortcut" android:label="@string/shortcut"> <intent-filter> <action android:name="android.intent.action.CREATE_SHORTCUT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> ```其中android.targetActivity是指向对应快捷方式的activity,如上述的shortcut(此Activity名) android:label是指快捷方式的名称,而快捷方式的图标默认是给定的application图标 ```java 7、第三层<service> ```【1】service与activity同级,与activity不同的是,它不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。比如听音乐,网络下载数据等,都是由service运行的 【2】service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法 【3】service与activity间的通信 Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),Activity与service间的通信主要用IBinder负责。 【4】 ```java <service android:enabled=["true" | "false"] android:exported[="true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string"> </service>
--指定了此action的receiver会接收此广播
需传递参数(可选) putExtra();
发送:sendBroadcast(Intent);
9、第三层<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"> <grant-uri-permission/> <meta-data/> </provider> ```contentProvider(数据存储) 【1】android:authorities: 标识这个ContentProvider,调用者可以根据这个标识来找到它 【2】android:grantUriPermission: 对某个URI授予的权限 【3】android:initOrder ```java 10、第三层<uses-library> ```用户库,可自定义。所有android的包都可以引用 ```java 11、第一层<supports-screens> <supports-screens android:smallScreens=["true" | "false"] android:normalScreens=["true" | "false"] android:largeScreens=["true" | "false"] android:anyDensity=["true" | "false"] /> ```这是在android1.6以后的新特性,支持多屏幕机制各属性含义:这四个属性,是否支持大屏,是否支持中屏,是否支持小屏,是否支持多种不同密度 ```java 12、第二层<uses-configuration />与<uses-feature>性能都差不多 <uses-configuration android:reqFiveWayNav=["true" | "false"] android:reqHardKeyboard=["true" | "false"] android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"] android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"] android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] /> <uses-feature android:glEsVersion="integer" android:name="string" android:required=["true" | "false"] /> ```这两者都是在描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。 ```java 13、第二层<uses-sdk /> <uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer"/> ```描述应用所需的api level,就是版本,目前是android 2.2 = 8,android2.1 = 7,android1.6 = 4,android1.5=3在此属性中可以指定支持的最小版本,目标版本以及最大版本 ```java 14、第二层<instrumentation /> <instrumentation android:functionalTest=["true" | "false"] android:handleProfiling=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:targetPackage="string"/> ``` 定义一些用于探测和分析应用性能等等相关的类,可以监控程序。在各个应用程序的组件之前instrumentation类被实例化 android:functionalTest(解释:instrumentation类是否能运行一个功能测试,默认为false) ```java 15、<permission>、<uses-permission>、<permission-tree />、<permission-group />区别
最常用的当属,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明,此与同级,具体权限列表请看此处通常情况下我们不需要为自己的应用程序声明某个权限,除非你提供了供其他应用程序调用的代码或者数据。这个时候你才需要使用 这个标签。很显然这个标签可以让我们声明自己的权限。比如:
<permission android:name="com.teleca.project.MY_SECURITY" . . . /> ```那么在activity中就可以声明该自定义权限了,如: ```java <application . . .> <activity android:name="XXX" . . . > android:permission="com.teleca.project.MY_SECURITY"> </activity> </application>
当然自己声明的permission也不能随意的使用,还是需要使用来声明你需要该权限
就是声明一个标签,该标签代表了一组permissions,而是为一组permissions声明了一个namespace。这两个标签可以看之前的系列文章