android动态修改app桌面icon

原理:
在Manifest文件中,使用<activity-alias>标签为我们的入口Activity准备多个,拥有<activity-alias>标签的activity是为了指向入口Activity,每个拥有<activity-alias>标签的activity都可以单独设置一个icon,在程序中我们动态设置<activity-alias>,然后kill掉launcher,等launcher重启后,icon就替换了

注意:
kill掉launcher需加权限 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

代码:
Manifest.xml:

[html] view plaincopy

  1. <activity
  2. android:name="com.dance.changeicondemo.MainActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. </intent-filter>
  7. </activity>
  8. <activity-alias
  9. android:name="com.example.changeicondemo.ActivityAlias1"
  10. android:enabled="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:targetActivity="com.dance.changeicondemo.MainActivity" >
  14. <intent-filter>
  15. <action android:name="android.intent.action.MAIN" />
  16. <category android:name="android.intent.category.LAUNCHER" />
  17. </intent-filter>
  18. </activity-alias>
  19. <activity-alias
  20. android:name="com.example.changeicondemo.ActivityAlias2"
  21. android:enabled="false"
  22. android:icon="@drawable/icon2"
  23. android:label="@string/app_name"
  24. android:targetActivity="com.dance.changeicondemo.MainActivity" >
  25. <intent-filter>
  26. <action android:name="android.intent.action.MAIN" />
  27. <category android:name="android.intent.category.LAUNCHER" />
  28. </intent-filter>
  29. </activity-alias>

code:

[java] view plaincopy

  1. private void setIcon(String activity_alias) {
  2. Context ctx = MyApplication.getContext();
  3. PackageManager pm = ctx.getPackageManager();
  4. ActivityManager am = (ActivityManager) ctx.getSystemService(Activity.ACTIVITY_SERVICE);
  5. // Enable/disable activity-aliases
  6. pm.setComponentEnabledSetting(
  7. new ComponentName(ctx, ACTIVITY_ALIAS_1),
  8. ACTIVITY_ALIAS_1.equals(activity_alias) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
  9. : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
  10. PackageManager.DONT_KILL_APP);
  11. pm.setComponentEnabledSetting(
  12. new ComponentName(ctx, ACTIVITY_ALIAS_2),
  13. ACTIVITY_ALIAS_2.equals(activity_alias) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
  14. : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
  15. PackageManager.DONT_KILL_APP);
  16. // Find launcher and kill it
  17. Intent i = new Intent(Intent.ACTION_MAIN);
  18. i.addCategory(Intent.CATEGORY_HOME);
  19. i.addCategory(Intent.CATEGORY_DEFAULT);
  20. List<ResolveInfo> resolves = pm.queryIntentActivities(i, 0);
  21. for (ResolveInfo res : resolves) {
  22. if (res.activityInfo != null) {
  23. am.killBackgroundProcesses(res.activityInfo.packageName);
  24. }
  25. }
  26. }
时间: 2024-08-04 21:42:22

android动态修改app桌面icon的相关文章

【C#】#103 动态修改App.config配置文件

对 C/S模式 下的 App.config 配置文件的AppSetting节点,支持配置信息现改现用,并可以持久保存. 一. 先了解一下如何获取 配置信息里面的内容[获取配置信息推荐使用这个] 1.1 获取方法一:获取之前需要引用命名空间: using System.Configuration; ConfigurationManager.AppSettings["key"] 1.2 获取方法二:使用XML类,直接 Load 配置文件,然后读取 AppSetting节点下的信息[不推荐使

Android如何修改app不在多任务列表中显示

在实际开发中,我们希望某些activity或者应用程序不在多任务列表中显示,即长按Home键或者多任务按钮键不显示最近运行的程序,我们可以在相应应用程序的AndroidManifest.xml文件中的activity标签中添加如下属性: android:excludeFromRecents="true" 比如不需要xxxActivity显示在多任务列表中: <activity android:name="xxxActivity" android:label=&

【Android开发】APP桌面角标问题

Demo:https://github.com/baitutang1221/BadgeNumberManager 参考:https://juejin.im/post/59f2e59751882578c17ee275 原文地址:https://www.cnblogs.com/neo-java/p/10185068.html

ios动态修改指令

最近逆向个app,不想直接用ida修改app的指令,而是在执行过程中,用插件动态修改app的指令.经大神指点,大致是用mach_vm_protect 和mach_vm_write来操作,也在iosre.com上找到了类似源码,把代码放入了theos中,但每次执行make后,总是链接阶段报错:ld: symbol(s) not found for architecture armv7 似乎是找不到mach_vm_write 适合armv7的库文件.搞了好久都不行. 无奈,再来研究下源码的编译条件.

Android 动态更换桌面图标

每当双 11.12 来临之际,Android 手机 Launcher 中的淘宝.天猫图标就会变成双 11.12 主题的图标.实现了动态切换图标.名称 MainActivity package com.example.modifyappdemo; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentName; import android.content.p

Android 使用Log4j把日志写入SD卡,动态修改输出文件名称

一.Log4j简单使用 1. 下载log4j.jar http://logging.apache.org/log4j/2.x/ 2. 创建Java代码 public class Loggers { public static Logger logger = Logger. getLogger(Loggers. class); public static void init() { try { PatternLayout patternLayout = new PatternLayout(); p

android开发之APP Widget

android开发之APP Widget 本博文主要讲述的android开发中的桌面程序的开发--APP widget,主要用的是PendingIntent和RemoteViews. PendingIntent主要用来设置桌面程序的相应方式.此对象可以有三种Intent方式,第一个是开始一个新的Activity,第二个是发送一个广播,第三个是开始一个service. RemoteViews的作用:因为桌面程序和app程序不是属于一个进程,不能通过正常的操作控件的方式来操作.需要使用系统提供的Re

实现Android 动态加载APK(Fragment or Activity实现)

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 最近由于项目太大了,导致编译通不过(Android对一个应用中的方法个数貌似有限制),所以一直琢磨着能否将某些模块的APK不用安装,动态加载,通过在网上查找资料和网友的帮助,终于实现了APK的动态加载,网络上介绍APK动态加载的文章非常多,但是我觉得写得非常好的就是这位大牛的,我基本上就是使用他的这种方案,然后加入了自己的元素.这位大牛是通过Activity实现的,我稍作修改

Android中实现APP文本内容的分享发送与接收方法简述

谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要通过微信或者QQ,短信等社交工具发送给大家. (2)在网上发现一段特别好的文章,想要保存收藏下来. 上面描述了进入智能手机时代后,我们经常遇到的两种情况,那么作为开发者的我们如何让自己开发的APP实现这两种功能呢,下面我们以实现文本的发送分享以及接收来梳理下两种功能的实现过程(其他类型的数据在博文末