我想要实现的目标:
我正在创建一个应用程序,通过编程方式更改应用程序图标和应用程序名称。
我已经实现的内容:
我已经通过在Android清单中声明activity-alias来实现这一点,因为只有5个名称和图标可供选择。
我面临的问题:
如果您不知道名称的数量,并且必须以编程方式更新清单,则很难处理。
以下是我的代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drawerstack">
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias android:label="@string/app_name1"
android:icon="@drawable/ic_launcher"
android:name=".MainActivity-Red"
android:enabled="false"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias android:label="@string/app_name2"
android:icon="@drawable/ic_launcher_1"
android:name=".MainActivity-Pink"
android:enabled="false"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias android:label="@string/app_name3"
android:icon="@drawable/ic_launcher_2"
android:name=".MainActivity-Blue"
android:enabled="false"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias android:label="@string/app_name4"
android:icon="@drawable/ic_launcher_3"
android:name=".MainActivity-Grey"
android:enabled="false"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
</application>
</manifest>
在MainActivity.java文件中。
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view.getTag().equals(0)) {
changeIcon("com.drawerstack.MainActivity-Red");
removeIcon("com.drawerstack.MainActivity");
removeIcon("com.drawerstack.MainActivity-Pink");
removeIcon("com.drawerstack.MainActivity-Blue");
removeIcon("com.drawerstack.MainActivity-Grey");
} else if (view.getTag().equals(1)) {
changeIcon("com.drawerstack.MainActivity-Pink");
removeIcon("com.drawerstack.MainActivity-Blue");
removeIcon("com.drawerstack.MainActivity-Grey");
removeIcon("com.drawerstack.MainActivity-Red");
removeIcon("com.drawerstack.MainActivity");
} else if (view.getTag().equals(2)) {
changeIcon("com.drawerstack.MainActivity-Blue");
removeIcon("com.drawerstack.MainActivity-Pink");
removeIcon("com.drawerstack.MainActivity-Grey");
removeIcon("com.drawerstack.MainActivity-Red");
removeIcon("com.drawerstack.MainActivity");
} else if (view.getTag().equals(3)) {
changeIcon("com.drawerstack.MainActivity-Grey");
removeIcon("com.drawerstack.MainActivity-Pink");
removeIcon("com.drawerstack.MainActivity-Red");
removeIcon("com.drawerstack.MainActivity-Blue");
removeIcon("com.drawerstack.MainActivity");
}
}
});
private void changeIcon(final String pkgName) {
doAsynchronousTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Date now = new Date();
if(now.after(afterDate)){
timer.cancel();
Common.dismissProgressDialog(MainActivity.this);
finish();
}
}
};
timer.schedule(doAsynchronousTask, 0, 50000);
Common.loadProgressDialog(MainActivity.this,false);
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.drawerstack", pkgName),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
private void removeIcon(String removePkg) {
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.drawerstack", removePkg),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}