activity-alias常见应用
详解:即activity的别名,可以重新定义当前某个activity的一些信息
常见应用场景:
动态更换图标
<applicationandroid:name=".MyApplication"android:theme="@style/Theme.MyApplication"><activity-aliasandroid:name=".test"android:enabled="false"android:icon="@drawable/dynamic01"android:targetActivity=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity-alias><activityandroid:name=".MainActivity"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
更换图标代码:
class ChangeIconUtils {companion object {fun enableComponent(s:ComponentName) {MyApplication.context?.let {var state = it.packageManager.getComponentEnabledSetting(s)if(state == COMPONENT_ENABLED_STATE_ENABLED){return}it.packageManager.setComponentEnabledSetting(s,COMPONENT_ENABLED_STATE_ENABLED,PackageManager.SYNCHRONOUS)}}fun disableComponent(s:ComponentName) {MyApplication.context?.let {var state = it.packageManager.getComponentEnabledSetting(s)if(state == COMPONENT_ENABLED_STATE_DISABLED){return}it.packageManager.setComponentEnabledSetting(s,COMPONENT_ENABLED_STATE_DISABLED,PackageManager.SYNCHRONOUS)}}}
}
基本步骤:app退出时更换图标,是否更换图标是一开始进入的时候获取的系统配置
常见问题:
1.运行时卸载不够干净,报错
Error type 3
Error: Activity class does not exist.
所以使用adb uninstall 包名卸载
2.application获取context不能直接获取,因为定义的静态变量不能访问非静态对象,所以需要在oncreate里面在获取
3.ComponentName(this, “com.example.myapplication.test”)也只能定义在当前实例创建之后,所以通常写在oncreate里面
4.exported如果设置成false,代表不能被其他应用打开,所以点击会提示该应用未安装,所以不要设置,默认为true
动态替换activity:同上,通常用于像WXPayEntryActivity需要在特定包名下的类,可以把别名的名称改成对应包名