安卓动态更换图标,这一篇应该够详细了吧~

这篇具有很好参考价值的文章主要介绍了安卓动态更换图标,这一篇应该够详细了吧~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

APP多个图标以及名称动态更换

首先是权限

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

其次是要启动的launch app

<activity
    android:name=".main"
    android:icon="图标"
    android:label="名称"
    android:configChanges="keyboardHidden|orientation|screenSize|locale|layoutDirection|screenLayout|mcc|mnc|touchscreen|keyboard|keyboardHidden|navigation"
    android:launchMode="singleTop"
    android:windowSoftInputMode="adjustResize|stateHidden" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

其次是它的其他进入路口,也就是使用activity-alias

图标,名称都可以自定义,只需要注意targetActivity要同launch。
name是后面启动的入口类,不要相同。
一开始建议enable都为false,不然主页会有两个图标显示。

<activity-alias
    android:name=".sha1"
    android:enabled="false"
    android:icon="图标1"
    android:label="名称1"
    android:targetActivity=".main">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
<activity-alias
    android:name=".sha2"
    android:enabled="false"
    android:icon="图标2"
    android:label="名称2"
    android:targetActivity=".main">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
<activity-alias
    android:name=".sha3"
    android:enabled="false"
    android:icon="图标3"
    android:label="名称3"
    android:targetActivity=".main">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

需要注意的是替换图标及名称建议在launch类里面进行,不然会出现莫名无法启动的问题,可能跟启动方式有关,所以后面启动方式我都改为了用包名启动,这样不会有问题。

动态更改图标

写详细一点,可以自己考虑精简
注意DISABLED和ENABLED的设定。

PackageManager pm = getPackageManager();

以下其中xxx为应用包名

替换为sha1

pm.setComponentEnabledSetting(getComponentName(),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); //关掉默认启动
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha2"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);//关掉sha2
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha3"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);//关掉sha3
pm.setComponentEnabledSetting(new ComponentName(getBaseContext(), "xxx.xxx.xxx.sha1"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);//启动sha1

剩下的以此类推

替换为sha2

pm.setComponentEnabledSetting(getComponentName(),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha1"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha3"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(getBaseContext(), "xxx.xxx.xxx.sha2"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

替换为sha3

pm.setComponentEnabledSetting(getComponentName(),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha1"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting( new ComponentName(getBaseContext(),"xxx.xxx.xxx.sha2"),PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(getBaseContext(), "xxx.xxx.xxx.sha3"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

在这里要注意的是,如果要启动此入口类app,在首次启动时用

Intent intent = new Intent();
intent.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.main");
startActivity(intent);

替换后启动方式为

Intent intent = new Intent();
intent.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.sha1");
startActivity(intent);

只需要保存更改后的包名即可,类似

String play = getSharedPreferences("syswj", Context.MODE_PRIVATE).getString("play","xxx.xxx.xxx.main");
Intent intent = new Intent();
intent.setClassName("xxx.xxx.xxx",play);
startActivity(intent);

android动态更换icon,学习,android,java
时隔多年,又写文咯o( ̄︶ ̄)o文章来源地址https://www.toymoban.com/news/detail-756709.html

到了这里,关于安卓动态更换图标,这一篇应该够详细了吧~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • wireshark抓包的使用,超级详细,收藏这一篇就够了

    抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(且、||或、!非) 1.1 协议过滤 直接输入协议名即可, TCP,只显示TCP协议 HTTP,只显示HTTP协议 ICMP,只显示ICMP协议 1.2 IP过滤 host 192.168.23.1 抓取主机地址为192.168.23.1的数据包

    2024年02月10日
    浏览(28)
  • 史上最详细的KMP算法教程,看这一篇就够了

    🧑‍💻 文章作者:Iareges 🔗 博客主页:https://blog.csdn.net/raelum ⚠️ 转载请注明出处 ⚠️ 本文讨论的下标均从 0 0 0 开始。 字符串匹配又称模式匹配(pattern matching)。该问题可以概括为「给定字符串 s s s 和 t t t ,在主串 s s s 中寻找子串 t t t 」。字符串 t t t 称为 模式串

    2024年03月27日
    浏览(40)
  • Linux Vim的使用(超详细,只看这一篇就足够了!)

    开篇先上 vim 键盘神图 1)Vim 中的5种编辑模式 在命令行中执行 vim filename ,若 filename 已存在,则 filename 被打开显示其内容;若 firename 不存在,则Vim在第一次存盘时自动在硬盘上新建filename文件。 vim有5种模式:命令模式、输入模式、末行模式、可视化模式、查询模式。 1.命令

    2024年02月06日
    浏览(40)
  • 【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

    A: 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。 消除类型之间的耦合关系 可替代性 可扩充性 接口性 灵活性 简化性 重载式多态在编译时已经确定好了。方法名相同而参数

    2024年01月20日
    浏览(52)
  • JavaWeb搭建| Tomcat配置| Maven依赖|这一篇就够了(超详细)

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感谢宝

    2024年02月01日
    浏览(47)
  • Vue3超详细的ref()用法,看这一篇就够了

    ref( ) 接受一个内部值,返回一个 ref 对象 ,这个对象是 响应式 的 、 可更改 的,且只有一个指向其内部值的属性 .value 。 ref() 将传入参数的值包装为一个带 .value 属性的 ref 对象。 举例: 查看打印结果: ref()方法允许创建可以使用 任何值类型的响应式 ref ref 的 .value 属性也

    2024年02月17日
    浏览(34)
  • Python入门到高手进阶|这一篇就够了(3万字|超详细)

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感

    2024年02月01日
    浏览(34)
  • 【Linux】shell编程基础(超详细,入门看这一篇就够了)

    🥇🥇【Liunx学习记录篇】🥇🥇 篇一:【Linux】VMware安装unbuntu18.04虚拟机-超详细步骤(附镜像文件) 篇二:【Linux】ubuntu18.04系统基础配置及操作 篇三:【Linux】用户与组的操作详细介绍 篇四:【Linux】管理Linux文件权限属性介绍 篇五:【Linux】使用数字表示法和文件表示法修

    2024年02月04日
    浏览(36)
  • Redis数据库和SpringBoot的故事|这一篇就够了(超详细)

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感谢宝

    2024年02月01日
    浏览(31)
  • 【排序算法】 快速排序(快排)!超详细看这一篇就够了”保姆级教学“

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 什么是快排?快排的速度到底有多快呢?它们的思想和实现是什么样的? 本文会对这快速排序进行详解,绝对细致入微!让你彻底搞懂快排! 英国计算机科学家Tony Hoare在1960年为了解决计算

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包