動(dòng)態(tài)更新桌面圖標(biāo) icon

每當(dāng)雙11或者節(jié)假日,安卓的桌面圖標(biāo)會(huì)更換成帶有節(jié)日元素的 icon,今天一探究竟,如何實(shí)現(xiàn)的。
需要用到的知識(shí):activity-alias

alias 英 [?e?li?s] 美 [?eli?s, ?elj?s]
n. 別名,化名;

顧名思義,activity-alias并不是代表一個(gè)Activity,而是代表一個(gè)已經(jīng)存在的Activity的別名。
它使用在清單文件中,類似Activity標(biāo)簽。它可用來(lái)設(shè)置某個(gè)Activity的快捷入口

activity-alias基本用法

<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string" >
    ...
</activity-alias>
  • 屬性說(shuō)明


    屬性表
代碼示例
<activity-alias
            android:name=".ui.jingdong618"
            android:enabled="false"
            android:icon="@mipmap/normal_listner"
            android:label="切換名稱1"
            android:targetActivity=".ui.MainActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity-alias>
  • activity-alias 可以預(yù)存多個(gè),然后根據(jù)條件去替換對(duì)應(yīng)的icon,及設(shè)置桌面app 名稱
<activity
            android:name=".ui.MainActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:launchMode="singleTask"
            android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</activity>
- - - -在Activity 中:
// 聲明 要替換的別名
String currentString = "com.qhpc.fangzhou.ui.jingdong618";
// 替換方法
public void changeIcon(String activityPath) {
        PackageManager pm = getPackageManager();
        pm.setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        pm.setComponentEnabledSetting(new ComponentName(this, activityPath),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);


        //重啟桌面 加速顯示
//        restartSystemLauncher(pm);
    }

public void restartSystemLauncher(PackageManager pm) {
        ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
        Intent i = new Intent(Intent.ACTION_MAIN);
        i.addCategory(Intent.CATEGORY_HOME);
        i.addCategory(Intent.CATEGORY_DEFAULT);
        List<ResolveInfo> resolves = pm.queryIntentActivities(i, 0);
        for (ResolveInfo res : resolves) {
            if (res.activityInfo != null) {
                am.killBackgroundProcesses(res.activityInfo.packageName);
            }
        }
 }

    @Override
protected void onDestroy() {
     changeIcon();
     super.onDestroy();
 }

說(shuō)明:

  • 我們依賴后端接口告知我們需要替換桌面icon了,這時(shí)候,我們將預(yù)先放置的icon 對(duì)應(yīng)的別名 currentString 賦值,然后存在本地(sharePreference )存儲(chǔ),為空才去替換, 放在啟動(dòng)頁(yè)的onDestroy 方法中去替換是考慮到,這樣替換的話跟隨用戶手動(dòng)退出操作就做了桌面icon的替換,用戶無(wú)感知;

代碼傳送門(mén) https://github.com/peterQin0826/AutoChangeIcon.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容