Android Manifest标签之action, activity-alias, category和compatible-screens

<action>

语法: 

<action android:name="string"/>

 

父标签:

<intent-filter>

描述:

每个<intent-filter>标签都必须有一个或者更多的<action>标签, 如果没有的话, 就不会有符合该intent-filter的intent了.

属性:

android:name.唯一的属性, 表示action的名字, 在intent类中有些默认的action名字, 格式为”ACTION_string”. 而在action:name中则使用”android.intent.action.string”来对应intent中的action. 比如: intent参数中的ACTION_MAIN对应android:name的android.intent.actioin.MAIN,用ACTION_WEB_SEARCH对应android.intent.action.WEB_SERACH.对于自定义的action, 最好使用包名做前缀, 以防止重名, 比如一个叫TRANSMOGRIFY的action可以定义成这样:

<action android:name="com.example.project.TRANSMOGRIFY"/>

<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" >
    . . .
</activity-alias>

父标签:

<application>

子标签:

<intent-filter>, <meta-data>

描述:

表示Activity的别名, 使用targetActivity属性命名. 目标必须在同一个application里, 并且必须声明在<activity-alias>前面. <activity-alias>标签对外呈现的是一个独立的<activity>,它拥有自己的<intent-filter>, 启动的方式跟原Activity是独立的. 比如如果在<activity-alias>中指定了"android.intent.action.MAIN"和"android.intent.category.LAUNCHER",那么即使原Activity没有指定这些<intent-filter>, 同样会在启动界面显示启动图标. 除了targetActivity之外,<activity-alias>的其它属性<activity>都包含, 在<activity-alias>中的属性, 将会使用<activity-alias>自己的值, 其余的属性将会复制<activity>中的值. 通常用来产生两个启动图标的时候使用.

属性:

android:enabled: 系统是否可以通过这个alias实例化activity.true表示可以, false表示不可以. 默认为true. <application>有自己的enabled属性, 必须两个同时为true才能通过该<activity-alias>启动activity.

android:exported: 其它APP是否可以通过该alias启动targetActivity.true表示可以, false表示不可以. 如果是false, 意味着只有同一个APP下的组件(或者同一个userID的APP下的组件)可以通过该alias启动targetActivity. 这个属性的默认值是动态的, 取决于该<activity-alias>是否包含<intent-filter>. 如果alias不包含任何intent-filter,意味着想要从这个alias启动activity只能通过intent指定明确的名称(显式), 这时候它只能通过APP内部调用, 所以这时候默认值是false. 如果包含intent-filter, 则意味着可以支持外部调用, 默认值为true.

android:icon: 指定通过alias启动activity的时候, 该activity的图标.

android:label: 指定通过alias启动activity的时候, 该activity的label.

android:name: 为alias指定唯一的名字, 这个名字应该看起来像一个类名, 但是跟activity不同, 它并不指向一个实际的类.

android:permission: 为该alias指定一个permission,任何企图通过该alias启动targetActivity的组件都必须拥有该权限才能启动该Activity. 如果设置了该属性, 它将取代targetActivity的任何permission, 如果未设置, 则意味着不需要任何权限使用该alias.

android:targetActivity: 指定目标Activity的名字, 该名字必须跟目标Activity的android:name一致, 并且该Activity必须在manifest中声明.


<category>:

语法:

<category android:name="string" />

父标签:

<intent-filter>

描述:

为intent filter指定一个category.

属性:

android:name: category的名字, 标准的category定义在Intent类中, 以”CATEGORY_name”这种模式提供. 如果希望接收一个隐式Intent,那么必须要在<intent-filter>中包含一个CATEGORY_DEFAULT, 因为通过startActivity()和startActivityForResult()发出的intent会自带一个CATEGORY_DEFAULT,如果没有这个则不能响应隐式Intent. 客户自定义的category应该使用包名作为前缀以防止重名.

 

<compatible-screens>

语法:

<compatible-screens>
    <screen android:screenSize=["small" | "normal" | "large" | "xlarge"]
            android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"
                                   | "280" | "360" | "420" | "480" | "560" ] />
    ...
</compatible-screens>

父标签:

<manifest>

描述:

指定APP对屏幕位置的兼容性. 每个manifest只能包含一个<compatible-screens>, 每个<compatible-screens>可以包含多个<screen>,每个<screen>指定了可以与APP兼容的屏幕尺寸和密度的组合.

Android本身并不去读取这个标签, 该标签只是提供信息用的, 某些外部的服务可能会用到这个标签(比如Google Play), 没有在该标签里出现的屏幕尺寸表示与该APP不能兼容.

通常情况下我们不应该使用这个标签, 使用这个标签会降低潜在的用户群体, 因为只要不在这个列表里的屏幕尺寸都是不被支持的. 使用了这个标签表示”绝对不能在某种屏幕尺寸下运行”. 在兼容多种屏幕尺寸的时候, 推荐这种方法.

如果我们想要声明APP可以支持的最小屏幕尺寸, 那么应该使用<support-screen>标签.

子标签:

<screen>: 指定一个APP可以兼容的屏幕尺寸配置, <compatible-screens>至少需要包含一个<screen>,<screen>必须包含android:screenSize和android:screenDensity属性. 如果只有一个属性的话, 那么它将会被忽略, 必须两种同时存在.

android:screenSize: 指定屏幕尺寸, 可以选择的值有:small, normal, large, xlarge.

android:screenDensity: 指定屏幕密度, 可以选择的值有: “ldpi”(约120dpi), “mdpi”(约 160dpi), “hdpi”(约240dpi), “xhdpi”(约320dpi), “280”,“360”, “420”, “480”, “560”.

栗子:

如果我们的APP想支持小屏幕(small)和普通屏幕(normal), 不管屏幕密度, 那么我们需要8个<screen>:

<manifest ... >
    ...
    <compatible-screens>
        <!-- all small size screens -->
        <screen android:screenSize="small" android:screenDensity="ldpi" />
        <screen android:screenSize="small" android:screenDensity="mdpi" />
        <screen android:screenSize="small" android:screenDensity="hdpi" />
        <screen android:screenSize="small" android:screenDensity="xhdpi" />
        <!-- all normal size screens -->
        <screen android:screenSize="normal" android:screenDensity="ldpi" />
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="normal" android:screenDensity="hdpi" />
        <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    </compatible-screens>
    <application ... >
        ...
    <application>
</manifest>

参考:

http://developer.android.com/guide/topics/manifest/action-element.html

http://developer.android.com/guide/topics/manifest/activity-alias-element.html

http://developer.android.com/guide/topics/manifest/category-element.html

http://developer.android.com/guide/topics/manifest/compatible-screens-element.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值