The ShortcutBadger makes your Android App show the count of unread messages as a badge on your App shortcut!

img

ShortcutBadger使用

主要实现badge生成和消除功能。

一般badge会配合Notifaction使用,故而在生成Notifaction的地方,调用badge生成方法。

而当App从后台返回前台时,调用badge清除方法。

测试运行效果

测试可行厂商

华为

三星

需调试厂商

小米

小米MIUI 6.0开始,发送通知自动生成桌面角标,且默认桌面角标数badge会根据通知ID个数自动累加,点击应用badge自动消失。同时,其提供开放API,可自定义badge个数。

针对小米,在调用端分开处理。

未开通桌面图标厂商

魅族

中兴

酷派

OPPO部分应用开通

最终代码

生成Notifaction和Badge时:

/**

* 生成通知和桌面角标

*/

private void setFlowNotifaction(Context context, Intent resultIntent, String title, String msg) {

mBadge++;

// 小米miui6.0以后根据通知自动生成badge,根据通知次数自动累加。调用ShortcutBadger会自动生成空通知,需调用以下修改badge

if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi") && Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {

tryNewMiuiBadge(context, resultIntent, mBadge, title, msg, R.drawable.icon_app);

} else {

showNotifacitonBadge(context, resultIntent, mBadge, title, msg, R.drawable.icon_app);

}

}

private void showNotifacitonBadge(Context context, Intent resultIntent, int badge, String title, String msg, int drawIcon) {

PendingIntent pendingIntent = PendingIntent.getActivity(context,

0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(context)

.setSmallIcon(drawIcon)

.setContentTitle(title)

.setContentText(msg)

.setTicker(msg);

// mBuilder.setFullScreenIntent(pendingIntent, true);

mBuilder.setContentIntent(pendingIntent);

mBuilder.setAutoCancel(true);

// 设置通知的优先级

mBuilder.setPriority(NotificationCompat.PRIORITY_HIGH);

// Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

// // 设置通知的提示音

// mBuilder.setSound(alarmSound);

mBuilder.setDefaults(Notification.DEFAULT_ALL);

int mNotificationId = 10086;

NotificationManager mNotifyMgr = (NotificationManager) context

.getSystemService(Context.NOTIFICATION_SERVICE);

mNotifyMgr.notify(mNotificationId, mBuilder.build());

// 生成桌面角标

ShortcutBadger.applyCount(JApplication.getInstance(), badge);

}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

private void tryNewMiuiBadge(Context context, Intent resultIntent, int badgeCount, String title, String msg, int drawIcon) {

PendingIntent pendingIntent = PendingIntent.getActivity(context,

0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(context)

.setSmallIcon(drawIcon)

.setContentTitle(title)

.setContentText(msg)

.setTicker(msg);

// mBuilder.setFullScreenIntent(pendingIntent, true);

mBuilder.setContentIntent(pendingIntent);

mBuilder.setAutoCancel(true);

// 设置通知的优先级

mBuilder.setPriority(NotificationCompat.PRIORITY_HIGH);

// Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

// // 设置通知的提示音

// mBuilder.setSound(alarmSound);

mBuilder.setDefaults(Notification.DEFAULT_ALL);

// int mNotificationId = 10086;

NotificationManager mNotifyMgr = (NotificationManager) context

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification notification = mBuilder.build();

try {

Field field = notification.getClass().getDeclaredField("extraNotification");

Object extraNotification = field.get(notification);

Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);

method.invoke(extraNotification, badgeCount);

} catch (Exception e) {

e.printStackTrace();

}

mNotifyMgr.notify(0, notification);

}

消除Badge时:

App从后台返回前台都需要清除badge,故而现在Activity基类中做统一检测处理

@Override

protected void onResume() {

super.onResume();

MobclickAgent.onResume(this);

// 小米miui6.0后,会自动清除badge,调用ShortcutBadger会自动生成空通知

if (mBadge > 0) {

if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi") && Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {

mBadge = 0;

} else {

mBadge = 0;

ShortcutBadger.applyCount(this, 0);

}

}

}

android桌面图标更新,Android桌面图标实现相关推荐

  1. android 11 版本更新内容,android 11怎么更新 android 11更新方法

    android 11怎么更新?在最近,谷歌和OPPO手机相继推出android 11,那我们该怎么将自己手机的Android版本升级到android 11呢,android 11怎么更新,下面就和小编 ...

  2. android 360自动更新,Android应用自动更新功能的实现!!!

    大家好,发现半年没有更新博客了,最近一直都比较忙,决定在凌晨 英超 阿森纳VS富勒姆 中场休息的时候,给大家分享Android里应用版本更新功能这一块的实现. 一个好的应用软件都是需要好的维护,从初出 ...

  3. android view如何更新,android – 如何使用RemoteView更新通知?

    以下是通过RemoteView更新通知的详细示例(此示例发生在扩展服务的类中,您可以在活动中使用它,BroadcastReceiver和其他Android组件): private static fin ...

  4. android 的检测更新,android 版本自动检测更新

    [实例简介] [实例截图] [核心代码] package com.hiyo.game.pdk.tool; import java.io.File; import java.io.FileOutputS ...

  5. android电池电量更新,android 电池(三):android电池系统

    一.电池系统结构 Android中的电池使用方式主要有三种:AC.USB.Battery 等不同的模式.在应用程序层次,通常包括了电池状态显示的功能.因此从 Android 系统的软件方面(包括驱动程 ...

  6. android apk 自动更新,Android自动更新APK

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 通过Service的方式(推荐使用JobService),在后台获取服务器的APK信息,然后下载到本地,通过调用系统安装 ...

  7. android eclipse自动更新,Android Eclipse 升级ADT到24.0.2完美解决方案

    由于在线下载更新奇慢无不,所以会出现"假死"的状态,具有的网友说下了整整一晚上(8小时+)才下载完成,所以在线下载ADT工具可以说是相当不靠谱的.故我下面给大家介绍一种离线下载AD ...

  8. android支付宝动态更新,Android仿支付宝首页下拉刷新

    题外话 学习了Behavior之后,发现效果都可以通过Behavior来实现,包括支付宝首页的下拉刷新效果,其重点效果指标在于下滑上部分的布局,同样能够进行下拉刷新,其下拉刷新的布局展开的位置在中间部 ...

  9. android wear2.0 更新,android wear2.0下载更新发布 更新内容详情

    androidwear2.0下载更新内容: 本次更新发布后,谷歌还联合LG发布了首批支持AndroidWear2.0的两款智能手表--lgwatchsport/style,将于2月10日上市.下面一起 ...

最新文章

  1. SQL与NoSQL区别-读写性能
  2. MySql中启用InnoDB数据引擎的方法
  3. WebRTC端点检测使用中遇到的部分问题汇总
  4. leetcode-9-回文数
  5. angularjs中使用swiper时不起作用,最后出现空白位
  6. 网易邮箱大师如何屏蔽邮件 屏蔽垃圾邮件的方法步骤
  7. linux下更新JDK版本
  8. 【证明】【一题多解】—— 负梯度方向的证明
  9. 游戏设计的第一步:设计体验
  10. 盘点:12个超炫数据可视化工具
  11. 怎么将多个文本文件合并为一个文本文件
  12. 想做合格的产品经理,你需要这个证书
  13. 微信公众号开发:账号申请与接入
  14. 99乘法表,九九乘法表
  15. vs2019开发android so库
  16. iOS 字体集(图文并茂)
  17. 解决com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
  18. 初识VB(一)——浏览文件并载入外部…
  19. UVA 1637 - Double Patience(概率DP)
  20. 华擎主板bios设置图解_[华擎主板bios设置图解]详解华擎主板bios恢复出厂设置

热门文章

  1. sql模糊查询多个条件写法
  2. RabbitMQ实现ElasticSearch和MySQL数据同步
  3. 后台:nodejs 前台:vue 全栈开发 完整功能的外卖平台系统
  4. 注册商标|商标缺乏显著性被驳回?一招搞定!
  5. 《Netty权威指南》-李林峰
  6. 利用多态的思想写一个王者荣耀的框架
  7. 小和尚学习-数组常用API
  8. 基于主动学习的高光谱图像分类方法研究
  9. Android使用矢量图(SVG, VectorDrawable)实践篇
  10. lotus ubuntu 18.04 安装(当前版本Devnet 7)