Android 动态替换应用图标

应用动态切换图标使用activity-alias和PackageManager来实现.

manifests文件:


    
        

        
    


    
        

        
    

在动态切换的代码中出现一个问题,原代码:

getPackageManager().setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
getPackageManager().setComponentEnabledSetting(new ComponentName(this, 
                getPackageName() + ".MainActivity-second"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

切换后,桌面需要很长的时间(不同的ROM有差别)才能将图标切换过来。
网上有一个解决方法大致如下:

//干掉桌面app,让它自动重启。
ActivityManager am = (ActivityManager)ctx.getSystemService(Activity.ACTIVITY_SERVICE);
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
i.addCategory(Intent.CATEGORY_DEFAULT);
List resolves = pm.queryIntentActivities(i, 0);
for (ResolveInfo res : resolves) {
    if (res.activityInfo != null) {
        am.killBackgroundProcesses(res.activityInfo.packageName);
    }
}

该方法可能比较老,在某些ROM上可以,某些还是很慢,不靠谱啊。

找来找去,终于在其他的代码中找到解决方法,修改flag:

getPackageManager().setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
getPackageManager().setComponentEnabledSetting(new ComponentName(this, 
                getPackageName() + ".MainActivity-second"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                0);

掩面泪奔,如此简单~~~
setComponentEnabledSetting方法的flag描述如下:

// @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.

可选的动作为
DONT_KILL_APP —— 不关闭APP
0 —— 关闭APP刷新
在用Framework方法的时候,一定得看方法注释!

你可能感兴趣的:(Android 动态替换应用图标)