Android动态更新APP图标 3年前

但凡一款用户量有一定的规模之后,运营都会在逢年过节的时候做一些活动来提高日活,促销商品等。所以为了配合活动,我们开发也需要在App启动图标上做出活动的效果,换一个活动图标,而且还在不额外发布版本的情况下。

效果演示图:

Android动态更新APP图标

这里是Github代码直通车

实现步骤

1.首先在AndroidManifest中创建一个activity的别名,用于替换启动页的activity,启动图标为活动图标。 标签为每个 Activity 注册一个别名, 通过这个别名就能启动对应的目标 Activity。它最重要的属性是:

android:enabled 属性,布尔类型,是否开启别名设置,默认值为 true;

<activity-alias
            android:name=".mainActivity"
            android:targetActivity=".MainActivity"
            android:icon="@mipmap/ic_festerval"
            android:label="@string/app_name"
            android:enabled="false">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>
2.页面代码如下:
class MainActivity : AppCompatActivity() {
    private var mPackageManager: PackageManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mPackageManager = applicationContext.packageManager

        ivIconFesterval.setOnClickListener {
            var festervalIcon = ComponentName(baseContext, "com.example.appiconchange.mainActivity")
            enableComponent(festervalIcon)
            disableComponent(componentName)
        }

        ivIconNomal.setOnClickListener {
            var nomalIcon = ComponentName(baseContext, "com.example.appiconchange.MainActivity")
            enableComponent(nomalIcon)
            disableComponent(componentName)
        }
    }

    //启用组件
    private fun enableComponent(componentName: ComponentName){
        mPackageManager?.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
        )
    }

    //隐藏组件
    private fun disableComponent(componentName: ComponentName){
        mPackageManager?.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
        )
    }
}

这里用到了ComponentName这个类,ComponentName可以启动Activity、Service。第一个参数为应用包名,另一个参数为要启动的Activity或服务所在包名+类名。

功能实现的核心在这里:
mPackageManager?.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
        )

 mPackageManager?.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
        )

当我们需要开启或关闭某个组件,只要创建packageManager对象和ComponentName对象,并调用packageManager对象的setComponentEnabledSetting方法。

参数componentName:组件名称
参数newState:组件新的状态,可以设置三个值,分别是如下:
不可用状态:COMPONENT_ENABLED_STATE_DISABLED
可用状态:COMPONENT_ENABLED_STATE_ENABLED
默认状态:COMPONENT_ENABLED_STATE_DEFAULT
参数flags:行为标签,值可以是DONT_KILL_APP或者0。

本文转自 https://www.jianshu.com/p/5852ec1a6037,如有侵权,请联系删除。

p
pengzhong
只要能和大家一起唱歌,大概就算毕业以后我们分开了,只要听见这首歌就能回想起现在。
3
发布数
0
关注者
6731
累计阅读

热门教程文档

Golang
23小节
爬虫
6小节
Dart
35小节
Kotlin
68小节
Next
43小节