activity-alias

参考:

activity-alias属性的使用

dingProg /NetworkCaptureSelf

用途

  • activity-alias 与 meta-data 配合使用。meta-data作为入口标记,可以实现类似“拨号-联系人-短信”应用的,通过同一个activity,打开不同的选项卡的功能。

  • 动态修改桌面图标

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

说明:

Activity的别名,可以独立支持intent-filter,meta-data等设置,因此可以出发一些跟目标Activity不同的功能逻辑。
比如可以用此属性的相关配置在桌面生成一个启动图标,作为目标Activity的快捷入口。

为 targetActivity 属性命名的 Activity 指定别名。 目标 Activity 必须位于当前应用程序中,且必须已在 manifest 中声明。

别名将目标 Activity 表示为另一个独立的实体。 该实体可以拥有一套自己的 Intent 过滤器,而不使用目标 Activity 已有的过滤器。
这些过滤器可以决定哪些 Intent 能通过别名来激活目标 Activity,并且决定系统如何处理别名。
例如:别名内的 Intent 过滤器可以设定“ android.intent.action.MAIN”和“android.intent.category.LAUNCHER” 标志,
使之能被程序启动器识别,即使目标 Activity 没有过滤器设置了这两个标志也没关系。

除 targetActivity 外, 的属性就是 属性的子集。
对于该子集中已有的属性,目标 Activity 中的设置值不会覆盖别名里的值。
对于子集中没有的属性,则目标 Activity 中的设置值同时适用于别名。

属性:

  • android:enabled : 此属性决定目标Activity可否通过别名被系统实例化,默认true。

系统能否用别名实例化目标 Activity —“true”表示可以,“false”表示不可以。 默认值是“true”。

元素拥有自己的 enabled 属性, 它适用于应用程序内的所有组件,包括 Activity 别名。
系统要能够用别名实例化目标 Activity ,
和的这两个属性必须同时设为“true”。 只要其中有一个是“false”,别名就不会生效。

  • android:exported : 此属性决定目标Activity可否被其他应用调起,如果false则只能被应用本身调起。

其它应用程序的组件能否用别名来启动目标 Activity —“true”表示可以,“false”表示不可以。
如果设为“false”,则只有当前或用户ID相同的应用程序的组件才能通过别名来启动目标 Activity。

默认值取决于别名是否包含 Intent 过滤器。
不包含任何 Intent 过滤器意味着必须指定精确的别名名称才能启动 Activity 。
这表示别名仅供程序内部使用(因为其他程序不知道它的完整名称)— 这时默认值是“false”。
反之,只要有一个以上过滤器存在,就意味着别名可以被外部程序使用 — 这时的默认值是“true”。

  • android:icon : 如果在桌面生成快捷入口,这个比较有用,可以与应用图标不同。

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

  • android:label : 生成桌面快捷入口时,图标下显示的文字,即app名称。

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

  • android:name

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

  • android:permission : 通过别名声明调起目标Activity所必需的权限。

通过别名启动目标 Activity 或让它执行工作的客户端所必须拥有的权限名称。
如果 startActivity()或 startActivityForResult() 的调用者没有被授权,则目标 Activity 不会被启动。
本属性将取代目标 Activity 本身的权限。 如果本属性未设置,表示不需要授权即能通过别名启动目标 Activity。

  • android:targetActivity : 目标Activity的完整包名类名。

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

注意:

在AndroidManifest配置文件中,activity-alias标签元素必须声明在目标Acitvity对应的activity标签元素之后,否则会编译错误。

使用案例:

当在Activity的onCreate()方法里,执行getIntent().getComponent().getClassName();
得到的可能不是这个Activity的名字,有可能是别名的名字,例如:在AndroidMenifest.xml有如下配置:

<activity   
    android:name=".TestAndroid"  
    android:icon="@drawable/ic_menu_mark">  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  
            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
</activity>  

<activity-alias   
    android:name="TestAndroidAlias"  
    android:targetActivity="TestAndroid"  
    android:label="testAndroidlias"  
    android:icon="@drawable/ic_launcher_phone">  
        <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>  

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

可以发现由于在AndroidManifest.xml中的标签的子标签中存在以下两句,
因此会生成2个应用图标,它们的名字是“android:label”的值。

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值