当前位置:   article > 正文

动态更新桌面图标_热更新替换appicon

热更新替换appicon

前言:每当临近双十一,手机里一些购物的APP桌面logo都在无感知情况下换成了活动主题logo。

方案:(1)热更新(2)使用Activity-alias,本文主要介绍该方式

实现:

1、AndroidManifest.xml中添加activity-alias

  1. <application
  2. android:allowBackup="true"
  3. android:icon="@mipmap/ic_launcher"
  4. android:label="@string/app_name"
  5. android:supportsRtl="true"
  6. android:theme="@style/AppTheme">
  7. <activity android:name=".MainActivity"
  8. android:enabled="true">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity-alias
  15. android:name="com.lpf.demo.MainActivity.One"
  16. android:enabled="false"
  17. android:icon="@mipmap/icon_one"
  18. android:targetActivity=".MainActivity">
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21. <category android:name="android.intent.category.LAUNCHER" />
  22. </intent-filter>
  23. </activity-alias>
  24. <activity-alias
  25. android:name="com.lpf.demo.MainActivity.Two"
  26. android:enabled="false"
  27. android:icon="@mipmap/icon_two"
  28. android:targetActivity=".MainActivity">
  29. <intent-filter>
  30. <action android:name="android.intent.action.MAIN" />
  31. <category android:name="android.intent.category.LAUNCHER" />
  32. </intent-filter>
  33. </activity-alias>
  34. <activity-alias
  35. android:name="com.lpf.demo.MainActivity.Three"
  36. android:enabled="false"
  37. android:icon="@mipmap/icon_three"
  38. android:targetActivity=".MainActivity">
  39. <intent-filter>
  40. <action android:name="android.intent.action.MAIN" />
  41. <category android:name="android.intent.category.LAUNCHER" />
  42. </intent-filter>
  43. </activity-alias>
  44. </application>

(1)acitvity-alias标签name命名:包名+任意唯一字符

(2)对于启动activity或acitvity-alias标签enabled只能有一个为true,否则桌面图标不只一个

(3)acitvity-alias标签targetActivity指向要启动的activity,可省略包名

2、切换桌面图标

  1. class MainActivity : Activity() {
  2. val mComponentNameList = mutableListOf<ComponentName>()
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. setContentView(R.layout.activity_main)
  6. mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity"))//activity全路径
  7. mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.One"))//activity-alias标签name
  8. mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.Two"))
  9. mComponentNameList.add(ComponentName(application, "com.lpf.demo.MainActivity.Three"))
  10. buttonDef.setOnClickListener {
  11. setComponentState(0)//默认图标
  12. }
  13. buttonOne.setOnClickListener {
  14. setComponentState(1)//图标一
  15. }
  16. buttonTwo.setOnClickListener {
  17. setComponentState(2)//图标二
  18. }
  19. buttonThree.setOnClickListener {
  20. setComponentState(3)//图标三
  21. }
  22. }
  23. private fun setComponentState(index: Int) {
  24. for (i in mComponentNameList.indices) {
  25. val state = packageManager.getComponentEnabledSetting(mComponentNameList[i])
  26. if (i == index) {
  27. if (state != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
  28. packageManager.setComponentEnabledSetting(
  29. mComponentNameList[i],
  30. PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
  31. PackageManager.DONT_KILL_APP
  32. )
  33. }
  34. mComponentNameList[i]
  35. } else {
  36. if (state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED){
  37. packageManager.setComponentEnabledSetting(
  38. mComponentNameList[i],
  39. PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
  40. PackageManager.DONT_KILL_APP
  41. )
  42. }
  43. }
  44. }
  45. }
  46. }

注:

(1)切换图标非及时生效,大概需要10秒左右桌面图标才刷新

(2)步骤二中切换为图标二,升级新版本覆盖安装后仍然为图标二而非默认的图标

(3)不要更改AndroidManifest中默认图标规则,切换图标要通过步骤二方式进行更改,否则可能会导致出现两个图标或无图标(如通过步骤二切换为图标二,新版本将AndroidManifest默认显示改为图标三,则覆盖安装后会同时出现图标二和图标三;另外如果当前默认为图标三且没有进行动态更改,新版本将AndroidManifest默认显示改为图标二,同时删除了图标三的activity-alias,则桌面无该APP图标)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/865825
推荐阅读
相关标签
  

闽ICP备14008679号