前言

消息通知是大多数用户类app都会用到的功能,这里介绍的是当有新消息的时候,app的桌面图标像微信和qq那样右上角出现红色的消息数量红点。实现代码分为8.0-版本和8.0+版本。

aaa.png

android 8.0+ (版本号 26 名称 O)

8.0+的系统直接使用新版本的消息通知渠道NotificationChannel即可设置桌面红点

//测试通知

public void testNotify(View v) {

NotificationCompat.Builder builder;

//8.0

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

builder = new NotificationCompat.Builder(this, getChannelId());

} else {

builder = new NotificationCompat.Builder(this, null);

//8.0以下版本桌面红点显示

// TODO: 2018/8/2

}

builder.setSmallIcon(R.mipmap.ic_launcher)

.setDefaults(Notification.DEFAULT_ALL)

.setTicker("title")

.setAutoCancel(true)

.setContentTitle("contentTitle")

.setContentText("contentText");

mNotificationManager.notify(123, builder.build());

}

@RequiresApi(api = Build.VERSION_CODES.O)

public String getChannelId() {

final String channelId = "1";

final String channelName = "com.mmc.tj";

NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);

channel.enableLights(true);//显示桌面红点

channel.setLightColor(Color.RED);

channel.setShowBadge(true);

mNotificationManager.createNotificationChannel(channel);

return channel.getId();

}

android 8.0以下版本

8.0以下版本的桌面红点需要借助开源库ShortcutBadger,这个库是专门用来帮助Android开发者快速生成桌面角标的。这个库并不是所有的机型都适配,对于主流的华为,xiaomi,三星,oppo支持,魅族和酷派等就不行,使用方法其实很简单,在github主页都有介绍:

//测试通知

public void testNotify(View v) {

NotificationCompat.Builder builder;

//8.0

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

builder = new NotificationCompat.Builder(this, getChannelId());

} else {

builder = new NotificationCompat.Builder(this, null);

//8.0以下版本桌面红点显示

ShortcutBadger.applyCount(context, ++sMessageCount);

}

builder.setSmallIcon(R.mipmap.ic_launcher)

.setDefaults(Notification.DEFAULT_ALL)

.setTicker("title")

.setAutoCancel(true)

.setContentTitle("contentTitle")

.setContentText("contentText");

mNotificationManager.notify(123, builder.build());

}

红点的取消

8.0+的系统不用我们去实现,app运行为前台进程时就自动取消了。对于8.0-版本通过ShortcutBadger库实现的,我们依然希望只要app任何一个界面一打开,就能取消红点,实现的思路如下

//创建一个Application.ActivityLifecycleCallbacks,该类可以监听每一个activity的生命周期

public class BaseAppLifeCycle implements Application.ActivityLifecycleCallbacks {

public void init(Application application) {

application.registerActivityLifecycleCallbacks(this);

}

@Override

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

}

@Override

public void onActivityStarted(Activity activity) {

}

//注册该监听以后,app的每一个activity的生命周期都会调用该callback的对应方法

@Override

public void onActivityResumed(Activity activity) {

//app不管哪个界面可见,桌面红点即消失

ShortcutBadger.applyCount(context,0);

}

@Override

public void onActivityPaused(Activity activity) {

}

@Override

public void onActivityStopped(Activity activity) {

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public void onActivityDestroyed(Activity activity) {

}

}

//在Application中注册该监听

public class BaseApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

new BaseAppLifeCycle().init(this);

}

}

android icon红点,android 桌面图标消息红点相关推荐

  1. (4.6.25)Android动态更换应用Icon之玩转桌面图标

    一原理解析 1 原理1activity-alias 2 原理2PMsetComponentEnabledSetting 二动态更换桌面icon 三远程控制图标的实现方式 四多入口实现方式 快捷方式入口 ...

  2. android eclipse更改项目程序桌面图标以及出现的问题?

    首先,在Eclipse中某个android项目上右击打开 New - Other 视图,选择Android Icon Set 然后点击Launcher icon,接下来点击Image,选择图片. 但是 ...

  3. android 删除插件,Android手机如何添加删除桌面图标和插件

    基于Android系统的手机还是很人性化的,安装容易删除和卸载也不难,朴素的风格下对新手来说刚开始操作还是会有些不适应的.除可在应用市场上删除应用外,还可利用手机本身来删除图标,下面一起来看看操作方法 ...

  4. Android应用之【隐藏桌面图标的一种方法】

    在Android10之前,应用程序通过调用PackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONE ...

  5. 【Android】Launcher3 app列表桌面图标按安装时间排序app图标

    1.概述 在定制化开发中,系统默认的app列表页的lcon是按照app名称排序的,按照安装时间排序app图标是其中一种方式 2.功能实现分析 Collections.sort(mApps,mAppNa ...

  6. Android应用如何隐藏APP桌面图标

    请在程序入口中加入如下代码: PackageManager packageManager = getPackageManager(); ComponentName componentName = ne ...

  7. 安卓Android 7.1.1 shortcut实现桌面图标快捷方式跳转,类似IOS 3d touch

    一.背景介绍: 3D Touch是一种立体触控技术,被苹果称为新一代多点触控技术,是在Apple Watch上采用的Force Touch,屏幕可感应不同的感压力度触控.3D Touch,苹果iPho ...

  8. 【Android开发日常】一文弄懂桌面图标快捷菜单 桌面小组件

    本文将介绍如何创建和管理应用快捷方式.如何创建和管理应用桌面小组件. 目录 一.桌面菜单 1.1 概览 1.2.为什么需要桌面图标快捷菜单 1.3.如何实现桌面图标快捷菜单 1.3.1 创建静态快捷方 ...

  9. 【Delphi】Android 桌面图标添加快捷菜单功能

    目录 一.为什么需要桌面图标长按快捷菜单 二.实现Android桌面图标快捷菜单 第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr 第二步:编辑项目中的 Andro ...

最新文章

  1. 如何优雅的设计java异常
  2. java p7 数字签名,p7结构的数字信封 | 学步园
  3. 数据元素和数据项的区别
  4. sql server2005用户权限如何设置
  5. 贵州师范学院计算机2级报名,贵州省2021年上半年计算机二级报名时间
  6. 深度学习入门笔记系列(三)——感知器模型和 tensorboard 的使用方法
  7. Unity3D For Android 开发教程【转http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html】...
  8. mysql 备份 索引_mysql-索引、导入、导出、备份、恢复
  9. 如何在小程序wxml文件中编写js代码
  10. POST型SQL注入教学
  11. max3232ese_max3232中文资料汇总(max3232引脚功能图_特性参数及应用电路)
  12. 它来了,指数基金定投实操!
  13. MapXtrem + Asp.net 地图随窗体改变大小
  14. 183. Customers Who Never Order没有下过订单的顾客MySQL
  15. 便捷网站或者工具(前端)
  16. repo init 下载代码error.GitError: manifests ls-remote: usage: git ls-remote
  17. table 表格合并
  18. 【JAVA Reference】Finalizer 剖析 (六)
  19. Linux 下 Login 和 Logout 详解
  20. 如何用计算机玩扫雷,电脑扫雷技巧详细解析 扫雷游戏怎么玩

热门文章

  1. Intellij IDEA 的激活方法
  2. RIO10数据集下载链接提取
  3. Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
  4. java utf-8 转 gbk / gbk 转 utf-8
  5. 162号段,165号段,167号段
  6. 民族列表JSON(可直接复制)
  7. 安卓来电归属地_比尔·盖茨懊悔让微软损失4000亿美金!当年为何会与安卓失之交臂?...
  8. LeetCode 第 993 题:二叉树的堂兄弟结点
  9. 【Pytorch】Cycle GAN实战(一):风格转换--真实风景图像转换为VanGogh风格
  10. qq在线模板html,qq错误模板sogoupy.ime