动态更新桌面图标

编程入门 行业动态 更新时间:2024-10-08 10:57:11

动态更新<a href=https://www.elefans.com/category/jswz/34/1767000.html style=桌面图标"/>

动态更新桌面图标

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

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

实现:

1、AndroidManifest.xml中添加activity-alias

<applicationandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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>

(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标签namemComponentNameList.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)}}}}
}

注:

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

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

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

更多推荐

动态更新桌面图标

本文发布于:2024-03-04 14:05:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709463.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:桌面图标   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!