参考链接:http://www.jianshu.com/p/1d83f9a98ffd
今天无意间看到了饿了么的图标突然被加上了517的字样,很好奇是怎么实现的,就百度了一下实现方式,特此记录一下。
在AndroidManifest.xml
文件的application
节点中添加如下代码:
<activity-alias
android:name=".activity.Bazaar" //替换之前Activity的名称
android:enabled="false"
android:icon="@mipmap/ic_launcher"
android:label="应用名称"
android:targetActivity=".activity.SplashActivity"> //填写应用程序入口Activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<action android:name="android.intent.action.MAIN" />
决定应用程序最先启动的Activity 。
<category android:name="android.intent.category.LAUNCHER" />
决定应用程序是否显示在程序列表里。
在程序第一个执行的activity中添加:
PackageManager mP;
ComponentName def;
ComponentName mBazaar;
mP = getApplicationContext().getPackageManager();
def = new ComponentName(getBaseContext(),"com.fangbei.umarket.activity.SplashActivity");
mBazaar=new ComponentName(getBaseContext(),"com.fangbei.umarket.activity.Bazaar");
private void enabledComponent(ComponentName name) {
mP.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
private void disableComponent(ComponentName name) {
mP.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
COMPONENT_ENABLED_STATE_DISABLED
通过查看源代码注释给的解释是禁用程序列表中的某个应用图标
COMPONENT_ENABLED_STATE_ENABLED
则相反
执行此方法改变图标
private void setIconSc() {
disableComponent(def); //禁用之前的图标
enabledComponent(mBazaar);}
private void setIconWm() {
disableComponent(mBazaar);
enabledComponent(def);}//显示快捷图标
假如双十一快到了就可以添加一个网络请求,调用上面例子setIconWm()
方法的判断是否需要修改应用图标和名称!
实现原理
简单的来说就是创建一个APP的快捷方式,快捷方式必须指向程序入口的Activity,此时这个APP就在桌面有两个快捷方式,然后在Activity里面通过PackageManager 类把之前的快捷方式禁用隐藏起来,只显示新的快捷方式就实现想要的功能啦,就是这么简单!