赞
踩
前言:每当临近双十一,手机里一些购物的APP桌面logo都在无感知情况下换成了活动主题logo。
方案:(1)热更新(2)使用Activity-alias,本文主要介绍该方式
实现:
1、AndroidManifest.xml中添加activity-alias
- <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:enabled="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
-
- <activity-alias
- android:name="com.lpf.demo.MainActivity.One"
- android:enabled="false"
- android:icon="@mipmap/icon_one"
- 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:name="com.lpf.demo.MainActivity.Two"
- android:enabled="false"
- android:icon="@mipmap/icon_two"
- 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:name="com.lpf.demo.MainActivity.Three"
- android:enabled="false"
- android:icon="@mipmap/icon_three"
- android:targetActivity=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity-alias>
- </application>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
(1)acitvity-alias标签name命名:包名+任意唯一字符
(2)对于启动activity或acitvity-alias标签enabled只能有一个为true,否则桌面图标不只一个
(3)acitvity-alias标签targetActivity指向要启动的activity,可省略包名
2、切换桌面图标
- class MainActivity : Activity() {
- val mComponentNameList = mutableListOf<ComponentName>()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
-
- mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity"))//activity全路径
- mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.One"))//activity-alias标签name
- mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.Two"))
- mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.Three"))
-
- buttonDef.setOnClickListener {
- setComponentState(0)//默认图标
- }
-
- buttonOne.setOnClickListener {
- setComponentState(1)//图标一
- }
-
- buttonTwo.setOnClickListener {
- setComponentState(2)//图标二
- }
-
- buttonThree.setOnClickListener {
- setComponentState(3)//图标三
- }
- }
-
- private fun setComponentState(index: Int) {
- for (i in mComponentNameList.indices) {
- val state = packageManager.getComponentEnabledSetting(mComponentNameList[i])
- if (i == index) {
- if (state != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
- packageManager.setComponentEnabledSetting(
- mComponentNameList[i],
- PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
- PackageManager.DONT_KILL_APP
- )
- }
- mComponentNameList[i]
- } else {
- if (state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED){
- packageManager.setComponentEnabledSetting(
- mComponentNameList[i],
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
- PackageManager.DONT_KILL_APP
- )
- }
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
注:
(1)切换图标非及时生效,大概需要10秒左右桌面图标才刷新
(2)步骤二中切换为图标二,升级新版本覆盖安装后仍然为图标二而非默认的图标
(3)不要更改AndroidManifest中默认图标规则,切换图标要通过步骤二方式进行更改,否则可能会导致出现两个图标或无图标(如通过步骤二切换为图标二,新版本将AndroidManifest默认显示改为图标三,则覆盖安装后会同时出现图标二和图标三;另外如果当前默认为图标三且没有进行动态更改,新版本将AndroidManifest默认显示改为图标二,同时删除了图标三的activity-alias,则桌面无该APP图标)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。