114.简单的动态切换app的图标,两种方式

news2024/11/23 15:19:38

 第一种方式:

1.第一步 通过activity-alias别名实现,manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test,以及一个默认的首页面HomeActivity:

<!-- 默认的图标-->
<activity-alias
    android:name=".activity.Default"
    android:icon="@mipmap/logo"
    android:label="@string/app_name"
    android:targetActivity=".activity.HomeActivity"
    android:enabled="false"
    android:exported="true"
    android:configChanges="orientation|navigation|keyboardHidden"
    android:theme="@style/AppThemeNoAnimation"
    android:launchMode="singleTop"
    android:excludeFromRecents="true"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!-- 需要切换的图标-->
<activity-alias
    android:name=".activity.Test"
    android:label="短信"
    android:icon="@mipmap/ic_launcher"
    android:targetActivity=".activity.HomeActivity"
    android:enabled="false"
    android:exported="true"
    android:configChanges="orientation|navigation|keyboardHidden"
    android:theme="@style/AppThemeNoAnimation"
    android:launchMode="singleTop"
    android:excludeFromRecents="true"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!-- 默认activity-->
<activity
    android:name=".activity.HomeActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

 2.第二步 实现切换代码:

 /**
     * 修改图标和名称的方法
     *
     * @param enable
     */
    public void changeIcon(boolean enable) {
        PackageManager pm = getApplicationContext().getPackageManager();

        if (enable) {
            //显示Test图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Test"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉Default图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Default"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉HomeActivity图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.HomeActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            Log.d("TAG", "换Test的图标");
        } else {
//            //显示Default图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Default"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
            //去掉Test图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Test"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉HomeActivity图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.HomeActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            Log.d("TAG", "换Default的图标");
        }
    }

3.第三步 代码调用:

//使用Test图标
changeIcon(true);
//使用Default图标
changeIcon(false);

使用Android studio运行时,运行几次就运行不了了,提示找不到活动类:

 出现此错误,解决办法如下:

 

  选择nothing即可

第二种方式:

 1.第一步 通过activity实现,manifest 这里写的是一个默认的HomeActivity和一个需要切换的TestActivity:

<activity
    android:icon="@mipmap/logo"
    android:label="@string/app_name"
    android:name=".activity.HomeActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

<activity
    android:icon="@mipmap/ic_launcher"
    android:label="Text name"
    android:name=".activity.TextActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

2.第二步 创建TextActivity并继承默认的HomeActivity:

public class TextActivity extends HomeActivity {

}

3.第三步 切换代码:

/**
 * 修改图标和名称的方法
 *
 * @param enable
 */
public void changeIcon(boolean enable) {
    PackageManager pm = getApplicationContext().getPackageManager();

    if (enable) {
        //显示TextActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.TextActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        //去掉HomeActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.HomeActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
        Log.d("TAG", "换TextActivity的图标");
    } else {
       //显示HomeActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.HomeActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
        //去掉TextActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.TextActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

        Log.d("TAG", "换HomeActivity的图标");
    }
}

4.第四步 代码调用:

//使用TextActivity图标
changeIcon(true);
//使用HomeActivity图标
changeIcon(false);

//如果想要app有多个图标,只需要新建几个activity页面并添加android:documentLaunchMode="intoExisting"    属性即可。

//-------------------------------------------------------------END------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

基于java SSM springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留…

java8中stream流式编程的使用大全

一、概述 Stream流操作是Java 8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&#xff0c;能 让代码更加简…

Node.js教程笔记(四)数据库与身份认证

学习目标 1、能够知道如何配置Mysql数据库环境 2、能够认识并使用常见的SQL语句操作数据库 3、能够在Express中操作Mysql数据库 4、能够了解Session的实现原理 5、能够了解JWT的实现原理 目录 1、数据库的基本概念 2、安装并配置Mysql 3、Mysql的基本使用 4、在Expre…

全球数十万客户选择亚马逊云科技数据库服务构建自己的应用

日前&#xff0c;全球市场分析机构Gartner发布《2022云数据库管理系统魔力象限》报告&#xff08;2022 Gartner Magic Quadrant™ for Cloud Database Management Systems&#xff09;。Gartner数据显示&#xff0c;整个数据库管理系统市场在2021年实现强劲增长22.3%&#xff0…

【五六七人口普查】我国省市两级各行业门类人口及三次产业人口比重

人口数据是我们在各项研究中最常使用的数据&#xff01;之前我们分享过第七次人口普查&#xff08;简称七普&#xff09;的数据&#xff01;很多小伙伴拿到数据后都反馈数据非常好用&#xff0c;同时很多小伙伴咨询有没有前面几次人口普查的数据&#xff0c;这样方便做人口变化…

【Java】final关键字和final的四种用法

final定义 final翻译成中文的意思是 “最终” &#xff0c; 它是java当中的一个关键字&#xff0c;使用final修饰的对象不允许修改或替换其原始值或定义。 假如当final修饰一个类的时候&#xff0c;是不能被其他类继承的。 final的四种用法 修饰类修饰方法修饰变量修饰参数 1.…

会话保持技术:cookie、session

目录 1.概述 2.cookie 3.session 1.概述 会话保持技术的出现是因为HTTP 是一个无状态的协议&#xff0c;这一次请求和上一次请求是没有任何关系的&#xff0c;互相无法感知&#xff0c;上一次请求干了什么&#xff1f;这一次请求完全不知道&#xff0c;会话保持技术就是为了…

Python协程asyncio异步编程结合uvloop性能提升

asyncio介绍 和我们以前常用的gevent模块相似&#xff0c;asyncio模块也是在Python中实现协程的模块区别是gevent是第三方库&#xff0c;通过greenlet实现协程&#xff0c;遇到I/O自动切换&#xff08;自动挡&#xff09;asyncio是Python 3.4版本引入的标准库&#xff0c;asyc…

GitHub访问问题与FastGithub下载及使用(详细篇)

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 FastGithub的介绍 FastGithub的下载 FastGithub的安装及…

23种设计模式之综合实战篇

23种设计模式之综合实战篇1. 设计模式概述1.1 什么是设计模式1.2 设计模式的好处2. 设计原则分类3. 详解3.1 单一职责原则3.2 开闭原则3.3 里氏代换原则3.4 依赖倒转原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特法则4. Awakening1. 设计模式概述 我们的软件开发技术也包括一…

微刊:做了很多的16S三代测序,文章可以这样写~

三代的黄金时代已经来临&#xff01;在扩增子方面与二代相比其优势明显&#xff1a;1&#xff1a;获得的序列更长&#xff0c;信息量更多更准确&#xff01;2;鉴定高精准&#xff0c;“种”水平物种鉴定中实现了大幅提升。3:PCR扩增无GC偏好性&#xff0c;数据更准确。4:V1-V9全…

MySQL多表操作的外键约束

目录 一.多表关系 一对一关系 一对多/多对一关系 多对多关系 二.外键约束 特点 创建外键约束 方式1-在创建表时设置外键约束 方式2-在创建表时设置外键约束 在外键约束下的操作 1.数据插入 2.删除数据 3.删除外键约束 外键约束-多对多关系 操作 一.多表关系 MySQL多表…

51单片机学习笔记-12LCD1602液晶屏

12 LCD1602液晶屏 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 12.1 LCD1602介绍 LCD1602&#xff08;Liquid Crystal Display&#xff09;…

【Java 数据结构】实现一个二叉搜索树

目录 1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法 2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看&#xff0c;它只比二叉树多了搜索两个字&#xff0c;我们回想一下&#xff0c;如果要是在二…

linux性能优化-CPU上下文切换

疑问&#xff1a;进程在竞争CPU时并没有真正运行&#xff0c;为什么还会导致系统的负载升高&#xff1f; 因为存在CPU上下文切换。 linux系统说明 Linux是一个多任务操作系统&#xff0c;它支持远大于CPU数量的任务同时运行。当然&#xff0c;这些任务实际上并不是真的在同时…

pytorch-lightning中使用wandb实现超参数搜索

由于最近涉及下游任务微调&#xff0c;预训练任务中的框架使用的是pytorch-lightning&#xff0c;使用了典型的VLP(vision-language modeling)的训练架构&#xff0c;如Vilt代码中&#xff1a;https://github.com/dandelin/ViLT&#xff0c;这类架构中只涉及到预训练&#xff0…

51单片机学习-5定时器与中断

5 定时器与中断 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 5.1 定时器原理与中断系统 5.1.1 定时器原理 CPU的时序指标有&#xff1a; 振…

C语言预处理命令是什么?

C语言源文件要经过编译、链接才能生成可执行程序&#xff1a;1) 编译&#xff08;Compile&#xff09;会将源文件&#xff08;.c文件&#xff09;转换为目标文件。对于 VC/VS&#xff0c;目标文件后缀为.obj&#xff1b;对于GCC&#xff0c;目标文件后缀为.o。编译是针对单个源…

ESP32设备驱动-ADS1015(ADC)驱动

ADS1015(ADC)驱动 1、ADS1015介绍 ADS1015 是一款具有 12 位分辨率的精密模数转换器 (ADC),采用超小型无引线 QFN-10 封装或 MSOP-10 封装。 ADS1015 的设计考虑了精度、功率和易于实施。 ADS1015 具有板载基准和振荡器。 数据通过 I2C 兼容的串行接口传输; 可以选择四个 I…

Portapack应用开发教程(十八)NavTex接收 C

有段时间没研究NavTex了&#xff0c;这段时间打算捡起来继续搞。 上一篇文章中&#xff0c;我用frisnit生成了wav文件。然后再用gnuradio观察波形&#xff0c;发现波形确实能与frisnit中的描述以及python解码程序中的dictionary对应上。 接下来&#xff0c;我要重点想办法自己…