Android动态修改桌面图标新坑总结

一.优秀文章概述

下面的文章描述动态修改桌面图标的基本方法,并且总结了很多坑及解决方案,以下是在此文章基础上的补充

《Android动态修改应用图标和名称》

二.第一个新坑

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这个方法,就可以在推送通知点击后,打开不同的图标的闪屏页

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值