android应用icon动态更换
来源:互联网 发布:win10网络连接 编辑:程序博客网 时间:2024/04/29 15:23
1. 动态更换应用Icon
原理 1 ---activity-alias
在AndroidManifest.xml 中,有两个属性:
<intent-filter>
// 决定应用程序最新启动的activity
<action android:name="android.intent.action.MAIN" />
// 决定应用程序是否显示在程序列表
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
另外,还有一个activity-alias属性,这个属性可以用于创建多个不同的入口,可以参考系统setting和launcher系统源码。
原理2 --- PM.setComponentEnabledSetting
PackageManager是一个大统领类,可以管理所有的系统组件,如果root后,还可以管理其他App的所有组件,一些系统优化工具就是通过这个方式禁用一些后台service的。
使用方式异常简单:
private void enableComponent(ComponentName componentName){
mPm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager. DONT_KILL_APP);
}
private void disableComponent(ComponentName componentName){
mPm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager. DONT_KILL_APP);
}
以上两个方法控制组件是否启用。
动态更换Icon
基于上面的两个原理,来实现动态更换Icon。
首先,创建一个Activity,作为默认的入口并带着默认的图片,再创建一个双11的activity-alias,指向默认的Activity并带双11的图片,再创建一个双12的activity-alias,指向默认的Activity并带有双12的图片…等等。
<activity android:name=".MainActivity" >
<intent-filter >
<action android:name=" android.intent.action.MAIN " />
<category android:name=" android.intent.category.LAUNCHER " />
</intent-filter>
</activity>
<activity-alias
android:name=".Test11"
android:enabled="false"
android:label="双11"
android:icon="@drawable/s11"
android:targetActivity=".MainActivity">
<intent-filter >
<action android:name=" android.intent.action.MAIN " />
<category android:name=" android.intent.category.LAUNCHER " />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".Test12"
android:enabled="false"
android:label="双12"
android:icon="@drawable/s12"
android:targetActivity=".MainActivity">
<intent-filter >
<action android:name=" android.intent.action.MAIN " />
<category android:name=" android.intent.category.LAUNCHER " />
</intent-filter>
</activity-alias>
这样配置的话,就可以在Lanucher显示2个入口,所以默认会把这些activity-alias先禁用,等到用时再启用。
如下是应用java代码:
public class MainActivity extends AppCompatActivity{
private ComponentName mDefault;
private ComponentName mDouble11;
private ComponentName mDouble12;
private PackageManager mPm;
@Override
protected void onCreate(Bundle savedInstanceState){
super. onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDefault = getComponentName();
mDouble11 = new ComponentName(getBaseContext(),”com.jxh.Test11”);
mDouble12 = new ComponentName(getBaseContext(),”com.jxh.Test12”);
mPm = getApplicationContext().getPackageManager();
}
public void changeIcon11(View view){
disableComponent(mDefault);
disableComponent(mDouble12);
enableComponent(mDouble11);
}
public void changeIcon12(View view){
disableComponent(mDefault);
disableComponent(mDouble11);
enableComponent(mDouble12);
}
private void enableComponent(ComponentName componentName){
mPm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager. DONT_KILL_APP);
}
private void disableComponent(ComponentName componentName){
mPm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager. DONT_KILL_APP);
}
}
主界面主要是两个按钮,一个双11,一个双12,点击可以调用对应的函数即可。
- android应用icon动态更换
- 动态更换应用Icon
- 利用activity-alias 动态更换应用Icon
- Android Studio多渠道打包并动态更换应用名、icon、参数等(一)
- (4.6.25)Android动态更换应用Icon之玩转桌面图标
- Android实现APP安装后动态更换Icon和名称(即一个App多种入口)
- Android中动态更换App的桌面icon图标和activity-alias的使用
- Android 动态更换图标
- Android 修改应用图标icon
- Android程序更换icon后不变的问题
- android 动态更换界面背景
- Android之动态更换桌面图标
- MFC更换图标ICON
- iOS更换icon
- 动态切换App桌面icon跟text,让你的应用炫起来(Android)!!
- Android应用之更换头像
- Android 更换应用图标无效
- Android notification动态设置网络图片icon
- SQL:连表时对另一张表的多次操作
- 函数(递归,记忆化搜索)
- Android安全攻防战,反编译与混淆技术完全解析(上)
- Linux常用命令
- 详解js中的原型链,prototype与__proto__的关系
- android应用icon动态更换
- 两道有意思的leetcode数学题
- nginx+redis+tomcat 负载均衡 session共享
- 访问修饰符
- python:print输出内容大拼接,重新认识 + 和 ,
- 我的技术阅读书单(实体书部分)
- Python学习笔记(13)-Python类与对象示例
- [BZOJ 1913][Apio2010]signaling 信号覆盖:计算几何
- 为什么新生代内存需要有两个Survivor区