一.优秀文章概述
下面的文章描述动态修改桌面图标的基本方法,并且总结了很多坑及解决方案,以下是在此文章基础上的补充
《Android动态修改应用图标和名称》
二.第一个新坑
Android9.0以上非小米手机,在动态修改图标后,最近任务列表不显示本应用的问题
这个问题可以用资源文件夹限定符解决:
首先找到AndroidManifest文件中的启动页别名配置,如下:
<activity-aliasandroid:name=".pages.launch.SplashActivity.mayday"android:enabled="false"android:icon="@mipmap/ic_launcher"android:roundIcon="@mipmap/ic_launcher"android:screenOrientation="portrait"android:targetActivity=".pages.launch.SplashActivity"android:theme="@style/LaunchMode"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="xxxapp" /></intent-filter></activity-alias>
在activity-alias节点添加android:theme属性,如下:
android:theme="@style/LaunchMode"
LaunchMode属性值指向res\values\styles.xml文件中的内容,然后添加如下代码:
<style name="LaunchMode" parent="@style/Theme.AppCompat.NoActionBar"><item name="android:launchMode">standard</item></style>
然后在res文件夹下建立values-v28文件夹,并新建styles.xml文件,添加如下代码:
<style name="LaunchMode" parent="@style/Theme.AppCompat.NoActionBar"><item name="android:launchMode">standard</item></style>
这样可以使启动页在不同版本启动模式不一样,从而解决9.0以上最近应用不出现自己的应用的问题
三.第二个新坑
当收到极光厂商通道的推送后,点击推送通知,从而启动APP闪屏页,如果此时在闪屏页配置了动态更换图标的代码,此时无法拉起APP
可以用如下代码解决
var iconList = listOf(".pages.launch.SplashActivity",//0默认".pages.launch.SplashActivity.mayday",//1五一)/*** 启动欢迎页,因为更换启动图标原因,此处启动代码比较特殊*/fun startSplashActivity(applicationContext: Context, packageName: String, context: Context) {val mainIntent = Intent()ponent = ComponentName(applicationContext,"$packageName${iconList[SPUtils.getInt("currentIconIndex", 0)]}")context.startActivity(mainIntent)}
其中$packageName是本APP包名,currentIconIndex是当前选择的icon在iconList中的集合索引,iconList的建立是为了方便保存动态更换图标的索引
用startSplashActivity这个方法,就可以在推送通知点击后,打开不同的图标的闪屏页