<activity-alias> 标签的使用
2017-01-06 本文已影响1225人
ahking17
之前在浏览器的AndroidManifest.xml中看到<activity-alias>的使用, 大概能猜到它的作用, 但很迷惑为什么要使用它. 直到看到了这篇文章:
http://yifeng.studio/2016/12/30/android-change-app-launcher-icon-dynamically/
《Android 利用 <activity-alias> 动态改变 App 桌面图标》
摘录:
我们能通过 <activity-alias> 标签为每个 Activity 注册一个“别名”, 通过这个别名就能启动对应的目标 Activity
它最重要的属性是:
android:enabled 属性,布尔类型,是否开启别名设置,默认值为 true;
使用场景 - 动态修改应用在桌面上的图标
给整个应用的入口 Activity 添加一个 <activity-alias> 标签,并设置预先设计好的替代桌面图标和应用名称.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="Samples"
android:supportsRtl="true"
android:name=".MyApplication"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name=".MainAliasActivity"
android:targetActivity=".MainActivity"
android:label="Samples Alias"
android:icon="@mipmap/ic_launcher_alias"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
</application>
值得注意的是: <activity-alias>一般情况下默认要设置为android:enabled="false", 当赶上节假日需要使用预先放置的特定图标时, 通过消息推送执行java代码, 动态设置<activity-alias>的enable属性为true, 这样就实现了替换图标的目的.
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(this, "com.yifeng.samples.AliasName"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
浏览器项目中的乱用
<activity android:name="org.chromium.chrome.browser.document.ChromeLauncherActivity"
android:theme="@style/AppThemeLauncher">
</activity>
<activity-alias android:name="com.qihoo.browser.activity.SplashActivity"
android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.APP_BROWSER" />
</intent-filter>
</activity-alias>
这里给ChromeLauncherActivity起了个别名SplashActivity, 在项目中也没有SplashActivity这个类.
但实际上使用<activity-alias> 并没有任何的实际意义, 也没有动态更改图标的业务需要, 只是毫无意义的增加了开发人员对AndroidManifest文件的一些迷惑, 这点得批评一下.
-----DONE.-------