AndroidManifest详解

一、关于AndroidManifest.xml

AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

二、AndroidManifest.xml结构

三、各个节点的详细介绍

1、第一层():(属性)

<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> 
image.gif

A、xmlns:android

定义android命名空间,一般为 http://schemas.android.com/apk/res/android ,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。

B、package

指定本应用内java主程序包的包名,它也是一个应用进程的默认名称

C、sharedUserId

表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的.所以不同APK(用户)间互相访问数据默认是禁止的.但是它也提供了2种APK间共享数据的形式:
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Share的数据.
本文对于这个不做详细解释
2. Shared User id
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样.比如某个公司开发了多个Android 程序, 那么可以把数据,图片等资源集中放到APK A中去. 然后这个公司的所有APK都使用同一个User ID, 那么所有的资源都可以从APK A中读取.
举个例子:
APK A 和APK B 都是C公司的产品,那么如果用户从APK A中登陆成功.那么打开APK B的时候就不用
再次登陆. 具体实现就是 A和B设置成同一个User ID:

  • 在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"> 
image.gif

这个"com.c" 就是user id, 然后packagename APK A就是上面的内容, APK B可能
是"com.android.demo.b1" 这个没有限制
这个设定好之后, APK B就可以像打开本地数据库那样 打开APK A中的数据库了.
APK A把登陆信息存放在A的数据目录下面. APK B每次启动的时候读取APK A下面的数据库
判断是否已经登陆:
APK B中的代码:

friendContext = this.createPackageContext( 
                  "com.android.demo.a1", 
                  Context.CONTEXT_IGNORE_SECURITY); 

[图片上传中...(image-d0eb6d-1538296610065-5)]

通过A的package name 就可以得到A的 packagecontext
通过这个context就可以直接打开数据库

D、sharedUserLabel

一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义

E、versionCode

是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。。。

F、versionName

这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。

G、installLocation

安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal
选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)
选择auto,系统将会根据存储空间自己去适应
选择internalOnly是指必须安装到内部才能运行
(注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:installLocation这个参数的属性为preferExternal)

2、第二层():属性

一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等)

<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> 

[图片上传中...(image-2f6023-1538296610065-4)]

A、android:allowClearUserData('true' or 'false')

用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然

B、android:allowTaskReparenting('true' or 'false')

是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务

C、android:backupAgent

这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)

D、android:debuggable

这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报以下错误:

Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.
Application XXX does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.

[图片上传中...(image-ae4d45-1538296610065-3)]

E、android:description/android:label

此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生

F、android:enabled

Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被 enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。

G、android:hasCode('true' or 'false')

表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码
一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象
(在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了)

H、android:icon

这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹下

I、android:killAfterRestore

是否复位需要重启

J、android:manageSpaceActivity

让应用手动管理应用的数据目录

K、android:name

为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。
若该类(比方androidMain类)是在声明的package下,则可以直接声明android:name="androidMain",但此类是在package下面的子包的话,就必须声明为全路径或android:name="package名称.子包名成.androidMain"

L、android:permission

设置许可名,这个属性若在上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的

M、android:presistent

该应用程序是否应该在任何时候都保持运行状态,默认为false。因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。

N、android:process

应用程序运行的进程名,它的默认值为元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候

O、android:restoreAnyVersion

同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false

P、android:taskAffinity

拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是元素中设定的package名

Q、android:theme

是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style。

3、第三层():属性

<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> 

[图片上传中...(image-2acf40-1538296610065-2)]

(注:有些在application中重复的就不多阐述了)

A、android:alwaysRetainTaskState

是否保留状态不变, 比如切换回home, 再从新打开,activity处于最后的状态。比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true

B、android:clearTaskOnLaunch

比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 重新启动 P,是否显示 Q

C、android:configChanges

当配置list发生修改时, 是否调用 onConfigurationChanged() 方法 比如 "locale|navigation|orientation". 这个我用过,主要用来看手机方向改变的. android手机在旋转后,layout会重新布局, 如何做到呢?正常情况下. 如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity. 就会从onCreate开始重新加载.如果你设置了 这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法. 而不跑onCreate方法等.

D、android:excludeFromRecents

是否可被显示在最近打开的activity列表里,默认是false

E、android:finishOnTaskLaunch

当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。Activity的亲和力将被忽略。该Activity已经被摧毁并非re-parented

F、android:launchMode(Activity加载模式)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式
Activity有四种加载模式:
standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。
singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
singleInstance:首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。那如果在多个task中共享一个Activity的话怎么办呢。举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效

G、android:multiprocess

是否允许多进程,默认是false
在实际开发中,CP有以下两种用法:
1)和应用在一个APK包里
这种情况下和应用在同一进程中。process name和uid都一样。
2)单独在一个APK包里。
这种情况下,如果在AndroidManifest.xml文件里声明了和某个进程同属一个进程,如:

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" /> 

[图片上传中...(image-514d5a-1538296610065-1)]

这个里面通过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机制进行调用。

H、android:noHistory

当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认是false。Activity不会留下历史痕迹

I、android:screenOrientation

activity显示的模式
默认为unspecified:由系统自动判断显示方向
landscape横屏模式,宽度比高度大
portrait竖屏模式, 高度比宽度大
user模式,用户当前首选的方向
behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换
nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了

J、android:stateNotNeeded

activity被销毁或者成功重启时是否保存状态

K、android:windowSoftInputMode

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【A】当有焦点产生时,软键盘是隐藏还是显示
【B】是否减少活动主窗口大小以便腾出空间放软键盘
各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

4、第四层()

结构图:

<intent-filter  android:icon="drawable resource" 
               android:label="string resource" 
               android:priority="integer" > 
      <action /> 
      <category /> 
      <data /> 
</intent-filter>    

[图片上传中...(image-6148a7-1538296610065-0)]

A、intent-filter属性

android:priority(解释:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高)Intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作

B、action属性

action很简单,只有android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口。
有关android:name的具体值:
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 大容量存储模式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,142评论 25 707
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,331评论 0 17
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,656评论 2 59
  • Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件...
    牧童遥指2000阅读 5,048评论 0 12
  • 夕阳西下,窄窄的天桥上涌动的下班人群,夕阳照耀在他们聪慧的脑袋上,仿佛人类的智慧在发光,我像个婴儿,捕捉到这一幕,...
    木子的星空6666阅读 299评论 1 0