但凡一款用户量有一定的规模之后,运营都会在逢年过节的时候做一些活动来提高日活,促销商品等。所以为了配合活动,我们开发也需要在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,如有侵权,请联系删除。