(4.6.12.8)< activity-alias >

activity-alias是android里为了重复使用Activity而设计的。
可用于多入口(桌面图标)进入和不同广播开启同一activity目标等

概念

语法:

引入自:API 级别 1

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

  • 包含于:
    < application >
  • 可包含:
    < intent-filter >
    < meta-data >

说明:

为 targetActivity 属性命名的 Activity 指定别名。 目标 Activity 必须位于当前应用程序中,且必须已在 manifest 中声明。
别名将目标 Activity 表示为另一个独立的实体。 该实体可以拥有一套自己的 Intent 过滤器,而不使用目标 Activity 已有的过滤器。 这些过滤器可以决定哪些 Intent 能通过别名来激活目标 Activity,并且决定系统如何处理别名。 例如:别名内的 Intent 过滤器可以设定“ android.intent.action.MAIN”和“android.intent.category.LAUNCHER” 标志,使之能被程序启动器识别,即使目标 Activity 没有过滤器设置了这两个标志也没关系。
除 targetActivity 外,< activity-alias > 的属性就是 < activity > 属性的子集。 对于该子集中已有的属性,目标 Activity 中的设置值不会覆盖别名里的值。 对于子集中没有的属性,则目标 Activity 中的设置值同时适用于别名。

属性:

  • android:enabled
    系统能否用别名实例化目标 Activity —“true”表示可以,“false”表示不可以。 默认值是“true”。
    < application > 元素拥有自己的 enabled 属性, 它适用于应用程序内的所有组件,包括 Activity 别名。 系统要能够用别名实例化目标 Activity , < application > 和< activity-alias >的这两个属性必须同时设为“true”。 只要其中有一个是“false”,别名就不会生效。

  • android:exported
    其它应用程序的组件能否用别名来启动目标 Activity —“true”表示可以,“false”表示不可以。 如果设为“false”,则只有当前或用户ID相同的应用程序的组件才能通过别名来启动目标 Activity。
    默认值取决于别名是否包含 Intent 过滤器。 不包含任何 Intent 过滤器意味着必须指定精确的别名名称才能启动 Activity 。 这表示别名仅供程序内部使用(因为其他程序不知道它的完整名称)— 这时默认值是“false”。 反之,只要有一个以上过滤器存在,就意味着别名可以被外部程序使用 — 这时的默认值是“true”。

  • android:icon
    用别名访问目标 Activity 时,用户看到的图标。详情请参阅 < activity > 元素的icon属性。

  • android:label
    用别名访问目标 Activity 时,用户看到的文本标签。详情请参阅 < activity > 元素的label属性。

  • android:name
    用作别名的唯一名称。 该名称应该使用类似于类的完全限定名相的格式。 但与目标 Activity 的名称不同,别名可以任意指定;它不代表实际的类。

  • android:permission
    通过别名启动目标 Activity 或让它执行工作的客户端所必须拥有的权限名称。如果 startActivity()或 startActivityForResult() 的调用者没有被授权,则目标 Activity 不会被启动。
    本属性将取代目标 Activity 本身的权限。 如果本属性未设置,表示不需要授权即能通过别名启动目标 Activity。
    有关权限的详细信息,请参阅介绍一文中的 权限 章节。

  • android:targetActivity
    可以用别名启动的 Activity。该名称必须与 manifest 文件中已定义的 < activity > 元素的 name 属性相一致。

多入口的实例

从下面的配置可以看出这是同一个activity(DeskClock)的两个入口,并且这两个入口的名字图标都一样,这样做有什么意义呢?可以看到activity-alias中标记了一个名为android.intent.category.DESK_DOCK的category,这个是在android设备插上桌面Dock底座的时候才会触发alias入口.

<activity android:name="DeskClock"
         android:label="@string/app_label"
         android:theme="@style/DeskClock"
         android:icon="@mipmap/ic_launcher_alarmclock"
         android:launchMode="singleTask"
         >

     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>

<activity-alias android:name="DockClock"
         android:targetActivity="DeskClock"
         android:label="@string/app_label"
         android:theme="@style/DeskClock"
         android:icon="@mipmap/ic_launcher_alarmclock"
         android:launchMode="singleTask"
         android:enabled="@bool/config_dockAppEnabled"
         >
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.DESK_DOCK" />
     </intent-filter>
</activity-alias>

activity-alias通过指定targetActivity来决定入口相连接的activity,给该程序更改一个不同的label(ClockAlias)和icon(菊花)并且替换掉Dock底座的category,如下部代码配置所示.

<activity-alias android:name="DockClock"
         android:targetActivity="DeskClock"
         android:label="@string/app_second_label"
         android:theme="@style/DeskClock"
         android:icon="@mipmap/entrance"
         android:launchMode="singleTask"
         >
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity-alias>

这样修改完成配置之后就可以实现在android设备上双入口图标了,点击两个图标都可以进入到DeskClock的程序里面,具体效果如下图所示
这里写图片描述

这个应用会在桌面上建两个进入点,即建两个可以进入TestAndroid这个Activity的快捷图标。这时getIntent().getComponent().getClassName() 得到的名字就不一样,一个是DeskClock,一个是DockClock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值