一直很纳闷每次过节搞活动时,某宝,某东的图标都会改成的醒目,莫非他们会为了一个图标发布一个版本么?
显然不会,那么是怎么做到的呢?
1.AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="visahall.cn.testchangeicon">
<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">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--更改图标-->
<activity-alias
android:name="test1"
android:targetActivity=".MainActivity"
android:icon="@mipmap/riven"
android:label="MyRiven"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
></activity-alias>
</application>
</manifest>
2.MainActivity:
public class MainActivity extends AppCompatActivity {
private ComponentName componentName1;
private ComponentName componentName2;
private PackageManager pm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
/**
* 为了快速测试,定义一个计时器,10秒后更换Icon
* 实际情况都是调用系统时间然后进行切换Icon,比如双11,双12等
*/
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
changeIcon();
}
},10000);
}
//修改图标
private void changeIcon(){
disableComponent(componentName1);
enableComponent(componentName2);
}
private void init() {
componentName1 = getComponentName();
componentName2 = new ComponentName(getBaseContext(), "visahall.cn.testchangeicon.test1");
pm = getApplicationContext().getPackageManager();
}
//启动
private void enableComponent(ComponentName componentName){
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
//关闭
private void disableComponent(ComponentName componentName){
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP
);
}
}
功能比较简单,直接上了代码,注释也很清楚,就不废话了。