听说支付宝推出的AR红包推出没几天就被我朝众多大神给搞了。。不能说支付宝App的“不坚挺”,只能说众大神太厉害了

~~

今天继续和大家分享Android中动态更新的内容。上篇博客中我和大家分享了如何实现Android中动态更新View的内容,从中大家也知道了如何使用DexClassLoader来动态加载Apk,以及如果通过Resource来获取外部Apk的资源。没有看的童靴点这里:

本篇博客要和大家分享的内容是如何实现动态更新App图标。这种场景想必大家都见的很多了。尤其是电商App以及现在的旅游App,例如:阿里系手淘,天猫,京东,携程旅游,途牛等等。每次在到重要节日时,你会突然发现他们的App图标变了,在过完节日后又变成了默认图标。并且是悄悄的。然后你一脸懵逼,我并没有更新App哇。。

是的,你真的没有更新App。下面我就和大家分享下如何实现动态更新App图标。

Android系统为我们提供了App可以实现多入口的功能,什么叫多入口呢?顾名思义,就是可以在桌面产生多个图标(多个launch icon),给你一种多个App的感觉,但是这多个launch icon 都指定了同一个入口,即启动的Activity界面是相同的。先来看看效果:

图飞了~~

如何实现多个入口呢?系统为我们提供了activity-alias,来看看如何使用:

在AndroidMainfest.xml配置文件中添加activiry-alias标签属性,上面可以看到比较常用的标签属性,其中targetActivity标注要对接的入口是哪个,就是要启动的Activity,我将其指向了MainActivty,MainActivity就是主入口:

其他属性很简单就不再赘述了。

注意:

1. IconOne中需要使用

android:launchMode="singleTask"

android:clearTaskOnLaunch="true"

否则, 下一次按Home退出后,按另一个icon进入就不会调用onNewIntent();

2. onNewIntent中注意setIntent否则getIntent()会是之前的intent.

3. activity-alias需要和主入口的相同。

4.activity-alias的enable在初始化时设置为false,就会被隐藏(即隐藏入口),如果设置为true,初始化时就会产生两个图标(即默认Activity和activity-alias)。

4.activity-alias的name是不能改的,如果当前版本的是second,下版本改成second_laodongjie,就会导致系统找second找不到,导致桌面无图标,应用打不开.

ok,实现了如何开启多个入口,那么我们就有了一个思路,换图标,只需要将默认的隐藏掉,然后显示新的activity-alias的就可以了哇。如何控制activity-alias的显示隐藏呢?大家要明白,activity就是一个Component组件哇,没错,就是PackageManager。我们可以利用setComponentEnabledSetting方法来开启和关闭组件,此时就可以动态控制桌面上图标的显示和隐藏了。

来看下核心代码:

/***初始化组件*/private voidinitComponent() {mainComponent=getComponentName();laodongjieComponent=newComponentName(getBaseContext(),"com.example.song.wave.SecondActivity");}/***开启*/private voidsetComponentEnable(ComponentNamecomponentEnable) {mPm.setComponentEnabledSetting(componentEnable,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);}/***关闭*/private voidsetComponentDisenable(ComponentNamecomponentEnable) {mPm.setComponentEnabledSetting(componentEnable,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);} 主要原理就是通过PackManager的flag来控制componentName的显示和隐藏。

此时有童靴可能会问?这怎么能动态的实现呢?没错,一般动态实现我们的思路都是在服务端保存一个图标,然后下载到客户端,此时客户端可以重新设置加载即可。

ok,今天的内容就到这里了,最后依旧奉上源码

android开发,动态图标,Android动态加载很难?带你快速实现App图标热更新相关推荐

  1. android图片传输三方框架,Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

  2. Android开发要达到阿里P7水平,很难吗,Android高级工程师必备知识

    举个例子: 对于OOM,需要知道有哪些优化工具可以使用(Lint.MAT等),如何检测OOM,以及垃圾回收机制等深层次的原理.对于性能优化来说,如何减少apk体积.资源动态加载等都是必会的.以下是性能 ...

  3. Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)

    android 应用中,如欢迎指引页面, 和图片轮播功能, 或者更多的内容在一页显示不了,要分成多个页面,这时候viewpager是很好用的. 首先看下效果: 下面是一个例子,带异步网络加载图片,并带 ...

  4. android 皮肤包换肤之Resources加载(一)

    Android 换肤之资源(Resources)加载(一) 本系列计划3篇: Android 换肤之资源(Resources)加载(一) - 本篇 setContentView() / LayoutI ...

  5. Android下拉刷新上拉加载控件,对所有View通用!

    前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能.不仅 ...

  6. Android开源框架集合分享-图像加载

    关于网络加载已经写完了,今天来给大家分享一下关于图像加载的知识,在开发中除了请求数据怎么显示之外,剩下的 最大的需求应该就在图像的显示上了,一开始的话都是直接加载,等到写完之后发现内存溢出,然后开始优 ...

  7. android 自定义加载动画效果,Android自定义View实现loading动画加载效果

    项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. ...

  8. 软件库Library之静态库\动态库和静态加载\动态加载

    软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.csdn.net/wallaceli1981/article/details/5740718 * 动 ...

  9. Android重点笔记,安卓listview 懒加载的实现笔记

    1.实现目的与用途 使用懒加载可降低单次访问后台的所获取的数据量,从而提高获取数据的速度,减少流量使用,加快UI界面的响应,提高用户体验度. 2.实现思路 两种实现思路: 1.先设定listview每 ...

  10. 从源码分析Android的Glide库的图片加载流程及特点

    转载:http://m.aspku.com/view-141093.html 这篇文章主要介绍了从源码分析Android的Glide库的图片加载流程及特点,Glide库是Android下一款人气很高的 ...

最新文章

  1. 智能合约语言Solidity 类型介绍
  2. 刘铁岩谈机器学习:随波逐流的太多,我们需要反思
  3. 两阶段提交(Two-Phase Commit)
  4. 复杂查询练习_数据分析之路——复杂查询(4)
  5. 使用Go语言从零编写PoS区块链
  6. jqGrid 常用方法
  7. Ray.tune可视化调整超参数Tensorflow 2.0
  8. 网络操作系统第1章习题
  9. Tachyou alluxio初识
  10. delphi idtcpclient和idtcpserver的心跳包
  11. postman支持socket吗_你必须知道postman和Jmeter做接口测试区别
  12. 冒泡排序法C语言代码
  13. 《空间谱估计理论与算法》学习笔记005-信号源数估计
  14. ClientHeight
  15. 基于遥感解译与GIS技术环境影响评价图件制作(最新导则)
  16. Win7去掉/恢复快捷方式箭头
  17. 湖北专升本MySQL复习(MySQL数据库实用教程)——MySQL数据表的操作
  18. Unity 3D委托entrust
  19. html5页面弹窗,H5页面怎么设置弹窗
  20. alt tab无法切换窗口

热门文章

  1. 在Ubuntu 8.10 中安装使用新一代输入法ibus Deb包下载_Ubuntu,Linux,ibus输入法,拼音,五笔,搜狗
  2. java计算机毕业设计四六级在线考试系统源码+系统+数据库+lw文档+mybatis+运行部署
  3. 微大夫感冒舒缓仪亮相“2018健康陕西发展大会”回顾
  4. 【总结】浪潮杯第七届ACM山东省省赛山师场总结
  5. html5水墨效果,html5 canvas水墨风格的云雾动画特效
  6. keyshot渲染玻璃打光_keyshot打光技巧,教你如何制作汽车自由式布光效果
  7. k8s免fq下载镜像
  8. html5中国产业联盟,中软国际联合发起HTML5+联盟为产业生态服务
  9. SQL Server安装中错误该性能计数器注册表配置单元已损坏。若要继续,必须修复该性能计数器注册表配置单元的解决
  10. python查看mac的usb信息_Python实现的读取电脑硬件信息功能示例