Android动态来改变App桌面图标

2023-11-08

时不时的我们就会发现,一些我们常见的应用,比如某宝,某东,在一些特殊的日子中,比如双十一,元旦,为了迎合这样一个日子的气氛,在桌面的应用图标就会发生改变,其实对于这样的一个桌面图标更换,Android中为我们提供了AndroidManifest.xml里的<activity-alias>标签实现方式(更多文章请关注我的微信公众账号,左边二维码)。




我们知道,我们每写一个 Activity就要在AndroidManifest进行配置一下,我们才可以正常的启动它,除此之外,我们还可以对它设置一个别名,也就是用<activity-alias>标签,这个标签的属性,和<activity>的属性一致,可以做一个简单的分析:


android:icon="@mipmap/app_logo"
android:label="@string/app_name"


上面的两个属性是用来设置图标和标签。


android:name=".newsLuncherActivity"


虽然说别名的name可以任意去写,但我想说的是,还是尽量设置成一个activity,尽量和一个<activity>的name保持一致,如果不设置成一个activity的名字,我发现部分手机会有问题,比我现在我手上的测试机。


android:enabled="false"


这个是否是显示别名,默认是true。


android:targetActivity=".MainActivity"


这个就比较重要了,指定别名启动的activity,一定要与原来启动入口activity的name保持一致,并且要在<activity>的标签下面。


具体实现如下:


<application
    
android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity 
android:name=".MainActivity">
        <intent-filter>
            <action 
android:name="android.intent.action.MAIN" />

            <category 
android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


上面呢是默认的图标,及默认的activity入口 。


<application
    
android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <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=".newsLuncherActivity"
        android:enabled="false"
        android:icon="@mipmap/app_logo"
        android:label="@string/app_name"
        android:targetActivity=".MainActivity">

        <intent-filter>
            <action 
android:name="android.intent.action.MAIN" />

            <category 
android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity-alias>
</application>


上面是添加<activity-alias>标签后,具体启动方式,我们可以这样做一个控制,服务器端设置一个开关,当请求到要更改桌面图标时,我们就可以通过 PackageManager 对象提供的 setComponentEnabledSetting()方法关闭当前 Component 组件,并启动别名对应的 Component 组件即可,为了使得图标能够快速更换,我们可以加上重启Luncher应用代码,name是自己定义个类名,记住一定要传全路径,如:


com.ming.abner.changelauncher.newsLuncherActivity


   private void changeLuncher(String name) {
        PackageManager pm = getPackageManager();
        
pm.setComponentEnabledSetting(getComponentName(),
                
PackageManager.COMPONENT_ENABLED_STATE_DISABLEDPackageManager.DONT_KILL_APP);
        
pm.setComponentEnabledSetting(new ComponentName(MainActivity.this, name),
                
PackageManager.COMPONENT_ENABLED_STATE_ENABLEDPackageManager.DONT_KILL_APP);

        
//Intent 重启 Launcher 应用
        
Intent intent = new Intent(Intent.ACTION_MAIN);
        
intent.addCategory(Intent.CATEGORY_HOME);
        
intent.addCategory(Intent.CATEGORY_DEFAULT);
        
List<ResolveInfo> resolves = pm.queryIntentActivities(intent0);
        for 
(ResolveInfo res : resolves) {
            if (res.activityInfo != null) {
                ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
                
am.killBackgroundProcesses(res.activityInfo.packageName);
            
}
        }
    }
}


<activity-alias>我们可以定义多个,对于不同时候,我们就可以动态去更换不同的图标。

记得添加权限:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android动态来改变App桌面图标 的相关文章

  • fastjson对泛型的反序列化

    文章目录 具体告警分析 告警影响 fastjson未指定泛型具体类型 fastjson TypeReference指定泛型具体类型 可以看到fastjson反序列化时IDEA提示告警 Unchecked assignment 怎么解决这个告
  • ubuntu+vscode构建c++开发调试环境

    1 vscode下载与安装 下载 Visual Studio Code Mac Linux Windows下载deb文件 运行指令安装vscode sudo dpkg i xxx deb 如果报 dpkg 错误 另外一个进程已经为 dpkg
  • python 3.7版本 打不开 python 3.8 保存的pickle文件

    1 问题描述 最近有一个pickle文件 当我使用python3 7 读取的时候报错 ValueError unsupported pickle protocol 5 查找原因发现是原始文件是用高版本的python解释器 比如3 8 保存的
  • 数据结构实验--表达式的后缀表示

    一 问题描述 表达式中包含运算对象 运算符和圆括号等 习惯上使用中缀表示 指运算符夹在两运算符对象中间 形式 计算表达式的值 涉及到运算符的优先级别 如先乘除后加减 括在一对圆括号中的子表达式必须先计算 因此 圆括号可视为特殊的运算符 具有
  • Linux--遇见的一些小错误

    一 问题 linux下运行出现 sh 1 pause not found 原因 在windows系统下 使用此语句 但linux不认识 system pause 解决方法 删去system pause 二 问题 编程时出现 Warning
  • Unity3D——AR小游戏

    文章目录 有趣的AR小游戏制作 环境准备 具体实现 替换Camera 上传识别卡 下载识别卡模型 编辑游戏对象 实验环境是否配置成功 导入Lean Touch脚本 制作成Android应用 游戏制作 实验结果 有趣的AR小游戏制作 环境准备
  • MySQL 5.1中文参考手册 - 学习笔记

    MySQL 5 1中文参考手册地址 http dev mysql com doc refman 5 1 zh index html 学习笔记及重要点 由于最近使用MySQL数据库的机会越来越多 所以看来这次要认真的学习一下了 以往只懂得皮毛
  • 线程-Linux下的轻量级进程

    首先我们知道 每个进程都是在各自独立的地址空间上运行 如果要同时完成好几个任务 比如你一边在下载软件 另一边在进行着其他的操作 那么试想一下 可不可以在一个进程里面把这几个事件同时进行呢 这里就要提到线程的概念了 但其实Linux中 并没有
  • Unity 实用代码 小工具

    Unity 实用代码 小工具 Unity 屏幕截图 全屏截图方法 全屏截图方法 带委托事件 自定义截图方法 自定义截图方法 带委托 延迟工具 携程延迟方法 携程延迟带委托方法 场景加载 场景加载 方法 场景加载方法 带委托 异步场景加载 方
  • Warning: This development build of composer is over 60 days old

    今天查看了一下服务器安装的Composer版本 报了一个警告 意思是安装已经超过60天了 需要执行 usr bin composer self update 升级到最新版本 然后我就执行了 再次查看版本确实更新到官方最新的1 7 3版本 但
  • PTA7(python3)

    python程序设计07 字符串与正则表达式 7 1 找最后的字符 30 分 7 2 重要的事情说N遍 20 分 7 3 号码牌的制作 10 分 7 4 统计字符串中指定字符的个数 30 分 7 5 字符串消除空格 30 分 7 6 统计指
  • 三分钟弄懂物联网流行协议——MQTT

    MQTT Message Queue Telemetry Transport 翻译成中文就是 遥测传输协议 其主要提供了订阅 发布两种消息模式 更为简约 轻量 易于使用 特别适合于受限环境 带宽低 网络延迟高 网络通信不稳定 的消息分发 属
  • C++中vector迭代器失效问题及其解决方法

    C 中vector迭代器失效问题及其解决方法 迭代器的主要作用就是让算法能够不用关心底层数据结构 其底层实际就是一个指针 或者是对指针进行了封装 比如 vector的迭代器就是原生态指针T 因此迭代器失效 实际就是迭代器底层对应指针所指向的
  • php socket error 111,php中的socket_connect上的“连接被拒绝”错误

    我试图将一些代码从perl转换为php Perl代码如下所示 my handle Connect port host 我试图使用socket在PHP中做同样的事情 我试过socket create和socket connect socket
  • Windows(10/11)端vscode开发、调试远程Linux(Ubuntu14.04)端c++ 开发环境部署步骤

    1 安装vscode 进入https code visualstudio com 即vsocde官网选择Windows x64版本下载并安装 安装过程中推荐勾选往右键菜单添加通过vscode打开文件夹的选项 2 vsocde插件安装 打开v
  • 《影响力》第七章:稀缺

    稀缺 物以稀为贵 稍纵即逝 越是得不到就越觉得香 这是为啥 至于是不是真的香 由于得不到 也不得而知 例如 我有一个朋友觉得佐佐木希如果能娶来做老婆是很香的 简直就是夫复何求 然而这世上当真有人会把女神娶回家然后出轨还家暴 这说来还真是让人
  • 判断点是否在任意多边形内(java)

    import java util ArrayList public class Test public static void main String args double px 113 0253 double py 23 98049 A
  • 文心一言和讯飞星火全面对比测试:(三)常识问题

    前文回顾 在 一 语言理解能力测试中 我们主要测试了两个大语言模型对复杂语义的理解 对文章情绪的识别 对文章进行摘要总结 对文章进行要素提取 测试结果表明 在语言理解能力上 除了有些问题他拒绝回答之外 讯飞星火的表现明显要好于文心一言 可以
  • 函数和windows对象 有惊喜✔

    一 函数 函数的定义 类似于Java中的方法 是完成特定任务的代码语句块 1 系统函数 eval lt 表达式 gt 得到一个文本框的值 表单 例 var sname eval doucment form sname value parse

随机推荐