參考文章:Dovar-66的博客
<activity-alias>介紹:
大家知道,對(duì)于 Activity 組件听隐,使用時(shí)需要在 Manifest 文件中通過(guò) 標(biāo)簽注冊(cè) name补鼻、theme、intent-filter 等相關(guān)屬性信息雅任,然后通過(guò) Intent 操作便可以啟動(dòng)對(duì)應(yīng) Activity风范。殊不知,我們還能通過(guò) <activity-alias> 標(biāo)簽為每個(gè) Activity 注冊(cè)一個(gè)“別名”沪么,通過(guò)這個(gè)別名也能啟動(dòng)對(duì)應(yīng)的目標(biāo) Activity硼婿。我們來(lái)看一下這個(gè)“別名”能夠設(shè)置哪些屬性:
<activity android:name="com.sunnews.dodo.SplashActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name="com.sunnews.dodo.SplashAliasActivity"
android:targetActivity="com.sunnews.dodo.SplashActivity"
android:label="新消息!Do"
android:icon="@mipmap/ic_launcher"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
可以看出,大部分屬性與 <Activity>
標(biāo)簽的屬性一致禽车,簡(jiǎn)單分析一下:
android:enabled 屬性寇漫,布爾類型,是否開啟別名設(shè)置殉摔,默認(rèn)值為 true州胳;
android:exported 屬性,布爾類型逸月,是否支持其他應(yīng)用通過(guò)這個(gè)別名訪問(wèn)目標(biāo) Activity栓撞,默認(rèn)值為 true;
android:icon 和 label 屬性:類似 <activity>
標(biāo)簽彻采,表示目標(biāo) Activity 的顯示圖標(biāo)和標(biāo)簽腐缤;
android:name 屬性:Activity 別名捌归,在 <activity>
標(biāo)簽中肛响, name 屬性必須與對(duì)應(yīng) Activity 文件的名字保持一致,而這里的別名可任意設(shè)置惜索,保證唯一性即可特笋;
android:permission 屬性:權(quán)限設(shè)置,對(duì)別名的使用加以限制巾兆,詳細(xì)屬性值參考開發(fā)者官網(wǎng)對(duì) 權(quán)限部分 的說(shuō)明猎物;
android:targetActivity 屬性:指定別名能夠啟動(dòng)的目標(biāo) Activity,注意角塑,屬性值一定要對(duì)應(yīng)到 <activity>
標(biāo)簽中的 name 屬性蔫磨,并且該 <activity>
標(biāo)簽一定要位于 <activity-alias>
標(biāo)簽前面;
注意看圃伶,在別名設(shè)置中添加了 <intent-filter> 標(biāo)簽堤如,與 targetActivity 的設(shè)置一致:
android.intent.action.MAIN 表示這個(gè)別名設(shè)置是整個(gè)應(yīng)用的入口蒲列,應(yīng)用啟動(dòng)時(shí)第一個(gè)創(chuàng)建的就是這個(gè) Activity;
android.intent.category.LAUNCHER 表示這個(gè)別名設(shè)置將出現(xiàn)在桌面 Launcher 應(yīng)用上搀罢;
至于其他屬性蝗岖,<activity> 標(biāo)簽中也有相應(yīng)設(shè)置,只是通常我們?cè)?<application> 標(biāo)簽中統(tǒng)一設(shè)置而已榔至,然后<activity> 標(biāo)簽?zāi)J(rèn)繼承<application> 標(biāo)簽中的設(shè)置抵赢。上述代碼還有一點(diǎn)需要注意的是,android:enabled 屬性設(shè)為 false唧取,否則運(yùn)行時(shí)將會(huì)在桌面上出現(xiàn)兩個(gè)相同功能但不同顯示的應(yīng)用圖標(biāo)和名稱铅鲤。
動(dòng)態(tài)改變App桌面圖標(biāo):
變換圖標(biāo)
PackageManager pm = MyApplication.appContext.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(MyApplication.appContext, "com.sunnews.dodo.SplashActivity"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(MyApplication.appContext, "com.sunnews.dodo.SplashAliasActivity"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
換回圖標(biāo)
PackageManager pm = MyApplication.appContext.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(MyApplication.appContext, "com.sunnews.dodo.SplashAliasActivity"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(MyApplication.appContext, "com.sunnews.dodo.SplashActivity"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);