Androidダイナミック置換アプリケーションアイコン

2551 ワード

動的切替アイコンの適用は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);

顔を隠して涙を流して、こんなに簡単~~~setComponentEnabledSettings方法のflagは以下のように説明します:
// @param flags Optional behavior flags: {@link #DONT_KILL_APP} or 0.

オプションのアクションはDONT_KILL_APP-APP 0を閉じない-APPを閉じてリフレッシュするFrameworkメソッドを使うときは、必ずメソッドコメントを見なければなりません!