之前在瀏覽器的AndroidManifest.xml中看到<activity-alias>的使用, 大概能猜到它的作用淳附, 但很迷惑為什么要使用它. 直到看到了這篇文章:
http://yifeng.studio/2016/12/30/android-change-app-launcher-icon-dynamically/
《Android 利用 <activity-alias> 動(dòng)態(tài)改變 App 桌面圖標(biāo)》
摘錄:
我們能通過 <activity-alias> 標(biāo)簽為每個(gè) Activity 注冊(cè)一個(gè)“別名”, 通過這個(gè)別名就能啟動(dòng)對(duì)應(yīng)的目標(biāo) Activity
它最重要的屬性是:
android:enabled 屬性,布爾類型蠢古,是否開啟別名設(shè)置奴曙,默認(rèn)值為 true;
使用場(chǎng)景 - 動(dòng)態(tài)修改應(yīng)用在桌面上的圖標(biāo)
給整個(gè)應(yīng)用的入口 Activity 添加一個(gè) <activity-alias> 標(biāo)簽草讶,并設(shè)置預(yù)先設(shè)計(jì)好的替代桌面圖標(biāo)和應(yīng)用名稱.
<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>一般情況下默認(rèn)要設(shè)置為android:enabled="false"洽糟, 當(dāng)趕上節(jié)假日需要使用預(yù)先放置的特定圖標(biāo)時(shí), 通過消息推送執(zhí)行java代碼, 動(dòng)態(tài)設(shè)置<activity-alias>的enable屬性為true, 這樣就實(shí)現(xiàn)了替換圖標(biāo)的目的.
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);
瀏覽器項(xiàng)目中的亂用
<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起了個(gè)別名SplashActivity, 在項(xiàng)目中也沒有SplashActivity這個(gè)類.
但實(shí)際上使用<activity-alias> 并沒有任何的實(shí)際意義, 也沒有動(dòng)態(tài)更改圖標(biāo)的業(yè)務(wù)需要, 只是毫無意義的增加了開發(fā)人員對(duì)AndroidManifest文件的一些迷惑坤溃, 這點(diǎn)得批評(píng)一下.
-----DONE.-------