Android动态更新APP图标

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

效果演示图:

这里是Github代码直通车

实现步骤

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

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



            
                

                
            
        
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。

你可能感兴趣的:(Android动态更新APP图标)