一.优秀文章概述
下面的文章描述动态修改桌面图标的基本方法,并且总结了很多坑及解决方案,以下是在此文章基础上的补充
二.第一个新坑
Android9.0以上非小米手机,在动态修改图标后,最近任务列表不显示本应用的问题
这个问题可以用资源文件夹限定符解决:
首先找到AndroidManifest文件中的启动页别名配置,如下:
<activity-alias
android: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()
mainIntent.component = ComponentName(applicationContext,
"$packageName${iconList[SPUtils.getInt("currentIconIndex", 0)]}")
context.startActivity(mainIntent)
}
其中$packageName是本APP包名,currentIconIndex是当前选择的icon在iconList中的集合索引,iconList的建立是为了方便保存动态更换图标的索引
用startSplashActivity这个方法,就可以在推送通知点击后,打开不同的图标的闪屏页