Android知识Android 学习技术文章与视频讲座的心得技术收藏

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

上一篇下一篇

猜你喜欢

热点阅读