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