Android動態(tài)更換圖標(biāo)劲绪,無感知

本案例采用設(shè)置多個(gè)activity-alias的方式燕少,要求內(nèi)置好需要更換的圖標(biāo)

1卡者、AndroidManifest文件添加activity-alias 基操蒿囤,網(wǎng)上搜

<application
......
    <!--設(shè)置啟動模式為singleInstance-->
    <activity android:name=".LauncherActivity" android:launchMode="singleInstance">
    <activity-alias
            android:name="NormalLauncherActivity"
            android:enabled="true"
            android:exported="true"
            android:icon="@mipmap/app_launcher_normal"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:targetActivity=".LauncherActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name="Festival38LauncherActivity"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/app_launcher_38"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:targetActivity=".LauncherActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name="Festival51LauncherActivity"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/app_launcher_51"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:targetActivity=".LauncherActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>
......
</application

2客们、切換

LauncherActivity為啟動activity,在啟動頁中處理相關(guān)切換,重要的是將啟動頁啟動模式設(shè)置為singleInstance底挫,這樣在執(zhí)行切換時(shí)不會殺死其他任務(wù)棧的頁面

  //通過服務(wù)器接口獲取切換的參數(shù)恒傻,對比本地SharedPreferences記錄的參數(shù),如不一致建邓,執(zhí)行切換盈厘,在啟動頁跳轉(zhuǎn)到主頁時(shí),在啟動頁的onDestroy中切換
   @Override
   protected void onDestroy() {
       //偽代碼官边,服務(wù)器返回參數(shù)與本地不一致沸手,需要切換
       if (!icon_serve.equals(icon_local)){
           disableLogo();
           enableLogo();
       }
       super.onDestroy();
   }
  //在頁面執(zhí)行 super.onDestroy();之前,切換icon注簿,切換icon會殺掉任務(wù)棧的任務(wù)契吉,
  //所以給LauncherActivity設(shè)置為singleInstance,如此只會殺掉LauncherActivity诡渴,其他啟動的頁面不受影響
  //這樣并不會讓應(yīng)用退出捐晶,
  //enableLogo()方法如下:
  PackageManager pm = getPackageManager();
  //  假如需要切換到Festival38LauncherActivity
  ComponentName componentName = new ComponentName(this, getPackageName() + ".Festival38LauncherActivity");
  pm.setComponentEnabledSetting(componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
  //disableLogo()方法如下:
  PackageManager pm = getPackageManager();
  //當(dāng)前需要設(shè)置disable的activity-alias的name
  ComponentName componentName = new ComponentName(this, getPackageName() + ".NormalLauncherActivity");
  pm.setComponentEnabledSetting(componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

3、總結(jié)
都是網(wǎng)上找來的方法妄辩,也有很多坑惑灵,大家多找找看看,大致就是不要隨意更改已經(jīng)添加的activity-alias眼耀,最好只增不減不改英支。本文主要是寫切換icon不殺死應(yīng)用,做到無感知切換的方案哮伟,大致就是執(zhí)行enableLogo()和disableLogo()會使任務(wù)棧任務(wù)殺死潭辈,但我們只需要給啟動頁一個(gè)單獨(dú)的任務(wù)棧singleInstance,只殺死此棧內(nèi)任務(wù)澈吨,不影響應(yīng)用其他任務(wù)棧把敢,既可使應(yīng)用正常運(yùn)行,且完成icon切換谅辣,這種方式比“監(jiān)測應(yīng)用處于后臺切換”要好修赞,當(dāng)應(yīng)用處于后臺被殺,也是會影響用戶使用的撒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桑阶,一起剝皮案震驚了整個(gè)濱河市柏副,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚣录,老刑警劉巖割择,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萎河,居然都是意外死亡荔泳,警方通過查閱死者的電腦和手機(jī)蕉饼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玛歌,“玉大人昧港,你說我怎么就攤上這事≈ё樱” “怎么了创肥?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長值朋。 經(jīng)常有香客問我叹侄,道長,這世上最難降的妖魔是什么昨登? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任圈膏,我火速辦了婚禮,結(jié)果婚禮上篙骡,老公的妹妹穿的比我還像新娘稽坤。我一直安慰自己,他們只是感情好糯俗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布尿褪。 她就那樣靜靜地躺著,像睡著了一般得湘。 火紅的嫁衣襯著肌膚如雪杖玲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天淘正,我揣著相機(jī)與錄音摆马,去河邊找鬼。 笑死鸿吆,一個(gè)胖子當(dāng)著我的面吹牛囤采,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惩淳,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蕉毯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了思犁?” 一聲冷哼從身側(cè)響起代虾,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎激蹲,沒想到半個(gè)月后棉磨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡学辱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年乘瓤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了环形。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馅扣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出着降,到底是詐尸還是另有隱情差油,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布任洞,位于F島的核電站蓄喇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏交掏。R本人自食惡果不足惜妆偏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盅弛。 院中可真熱鬧钱骂,春花似錦、人聲如沸挪鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讨盒。三九已至解取,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間返顺,已是汗流浹背禀苦。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遂鹊,地道東北人振乏。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像秉扑,于是被迫代替她去往敵國和親昆码。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容