之前尝试过使用BadgeView来实现,修改涉及地方太多了,后来换了这种方式

本文仅简单实现拨号、短信图标动态提示未读数目,若有更好方式实现的,欢迎交流

Launcher.java

    private final Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {......
            //ADD BY XIONG.CHEN FOR SHOW UNREAD MMSelse if (msg.what == UPDATE_MMS_ICON) {setMmsOrPhoneNum(MMS_ICON_NAME, getMissMmsCount());} else if (msg.what == UPDATE_CALL_ICON) {setMmsOrPhoneNum(PHONE_ICON_NAME, getMissCallCount());}}};
        //ADD BY XIONG.CHEN FOR SHOW UNREAD MMS ADD MISSCALLprivate SMSContentObserver smsContentObserver = null;private CallContentObserver callContentObserver = null;private final static int UPDATE_MMS_ICON = 826;private final static int UPDATE_CALL_ICON = 1206;private final static String PHONE_ICON_NAME = "com.android.contacts.activities.DialtactsActivity";private final static String MMS_ICON_NAME = "com.android.mms.ui.ConversationList";public class SMSContentObserver extends ContentObserver {private Handler mSmsHandler;public SMSContentObserver(Context context, Handler handler) {super(handler);mSmsHandler = handler;}@Overridepublic void onChange(boolean selfChange) {mHandler.removeMessages(UPDATE_MMS_ICON);Message msg = mHandler.obtainMessage(UPDATE_MMS_ICON);msg.obj = getMissCallCount();mHandler.sendMessage(msg);}}public class CallContentObserver extends ContentObserver {private Handler mHandler;public CallContentObserver(Context context, Handler handler) {super(handler);mHandler = handler;}@Overridepublic void onChange(boolean selfChange) {mHandler.removeMessages(UPDATE_CALL_ICON);Message msg = mHandler.obtainMessage(UPDATE_CALL_ICON);msg.obj = getMissCallCount();mHandler.sendMessage(msg);}}/*** * @param flag updata which icon,phone or mms* @param missCount*/private void setMmsOrPhoneNum(final String flag, final int missCount) {if(mWorkspace == null) return;ArrayList<CellLayout> cellLayouts = mWorkspace.getWorkspaceAndHotseatCellLayouts();for (final CellLayout layoutParent: cellLayouts) {final ViewGroup shortcutAndWidgetContainer = layoutParent.getShortcutsAndWidgets();mWorkspace.post(new Runnable() {public void run() {int childCount = shortcutAndWidgetContainer.getChildCount();for (int j = 0; j < childCount; j++) {View view = shortcutAndWidgetContainer.getChildAt(j);Object tag = view.getTag();if (tag instanceof ShortcutInfo) {final ShortcutInfo info = (ShortcutInfo) tag;final Intent intent = info.intent;if (intent != null) {final ComponentName name = intent.getComponent();if (name != null && name.getClassName().equals(flag)) {BubbleTextView bv = (BubbleTextView) view;Bitmap defaultIconBitmap = Bitmap.createBitmap(info.getIcon(mIconCache));Bitmap bitmap = Utilities.createIconBitmap(defaultIconBitmap, missCount);bv.setCompoundDrawablesWithIntrinsicBounds(null,new FastBitmapDrawable(bitmap),null, null);}}}}}});}}private int getMissMmsCount() {int missSmsCount = 0;Cursor cursorSMS = null;Cursor cursorMMS = null;try {cursorSMS = getContentResolver().query(Uri.parse("content://sms"), null, "(read=0 and type=1)",null, null);cursorMMS = getContentResolver().query(Uri.parse("content://mms"), null, "(read=0)", null,null);} catch (SQLiteException e) {return missSmsCount;}if (cursorSMS != null) {missSmsCount = cursorSMS.getCount();cursorSMS.close();}if (cursorMMS != null) {missSmsCount = missSmsCount + cursorMMS.getCount();cursorMMS.close();}return missSmsCount;}private int getMissCallCount() {int missCallCount = 0;Uri missingCallUri = Calls.CONTENT_URI;String where = Calls.TYPE + " = '" + Calls.MISSED_TYPE + "'"+ " AND new=1";Cursor cursorCall = null;try {cursorCall = getContentResolver().query(missingCallUri,null, where, null, null);} catch (SQLiteException e) {return missCallCount;}if (cursorCall != null) {missCallCount = cursorCall.getCount();cursorCall.close();}return missCallCount;}//ADD END
    //add by xiong.chen for ...static Bitmap createIconBitmap(Bitmap b, int count) {if (count == 0) return b;int textureWidth = b.getWidth();final Canvas canvas = sCanvas;Paint paint = new Paint();canvas.setBitmap(b);paint.setColor(Color.RED);canvas.drawCircle(textureWidth - 17, 16, 16, paint);paint.setColor(Color.WHITE);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);canvas.drawCircle(textureWidth - 17, 16, 16, paint);Paint countPaint = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);  countPaint.setColor(Color.WHITE);  countPaint.setTextSize(26f);  countPaint.setTypeface(Typeface.DEFAULT_BOLD);  float x = textureWidth - 24;if (count > 9) x -= 4;        canvas.drawText(String.valueOf(count), x, 25, countPaint); //ENDreturn b;}

在finishBindingItems()方法中加入

        //ADD BY XIONG.CHEN ...int missCall = getMissCallCount();int missMms = getMissMmsCount();if(missCall != 0) {setMmsOrPhoneNum(PHONE_ICON_NAME, missCall);}if(missMms != 0) {setMmsOrPhoneNum(MMS_ICON_NAME, missMms);}

使得第一回启动launcher时便可提示未读信息

Launcher中拨号、短信图标加数字提示未接电话、未读短信数量相关推荐

  1. Xamarin Android 应用程序内图标上数字提示

    最近在用 Xamarin 做一个 Android 应用,打开应用时,如果有新消息,需要在应用内的 Toolbar 或者首页的图标上显示数字提示.在这里和大家分享一下实现方法,如果你有更新好的实现方法, ...

  2. 通知图标右上角数字提示

    通知图标右上角数字提示 <img src="${ctx}/images/layout/notice.svg" class="noticeSvg"/> ...

  3. Android 类似未读短信图标显示数字效果的分析

     之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下,   原理 一个应 ...

  4. 苹果手机显示已用短信服务器发送,iPhone手机一般发短信给对方,提示已送达和已读分别有什么不一样的意义。...

    iPhone短信已读和已送达都是苹果手机imessage才看得到.通过开启短信的已读回执功能,对方就能知道自己是否已查看信息.如果不开启的话,只能看见信息是否发送到. 已读和已送达都表示消息已经成功送 ...

  5. 求android实现未读短信图标数字提示效果

    ============问题描述============ 大家好, 我现在碰到一个需求是在一个图标上面加上一个数字,来提示有未读短信之类的效果. 效果图片发不出来,不知道是不是CSDN不让发,有知道的 ...

  6. 解决:HotSeat短信图标提醒有误

    [操作步骤]正常收发短信.彩信. [测试结果]所有短信均已阅读,但在HOME界面的短信图标仍提示有一条短信未读.重启后仍存在. 经过分析,导致该情况的主要原因为当彩信已读的时候,launcher中进行 ...

  7. Android 类似未读短信消息图标显示的实现分析

    这里面主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下, 原理 一个应用要实现这个效果,就要在自己有未读的消息的时候发送一个广播告诉系统我有未处理的事件了(例如: ...

  8. Android Launcher桌面图标显示数字

    之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下: 原理 一个应用要实 ...

  9. Android 10.0 Launcher3 电话和短信app图标显示未读短信和未接来电的条数

    最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接 ...

最新文章

  1. 虚拟机的操作系统的安装
  2. ubuntu14.06 Lts开启ssh服务
  3. vc2010多线程使用std标准模板库容器DEBUG版迭代器BUG
  4. 【题解】CF#611 H-New Year and Forgotten Tree
  5. Scatec Solar拟在乌克兰建设60MW光伏电站
  6. c盘users的用户名怎么改_做完这几个操作,我从C盘中清理了30G垃圾文件
  7. sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
  8. 新年元旦海报设计模板|具有浓厚中国风味的画面
  9. mysql如何创建日志_mysql中的日志
  10. linux 防火墙 iptables的简单使用
  11. keepalived漂移VIP故障
  12. sleuth zipkin mysql_springCloud的使用08-----服务链路追踪(sleuth+zipkin)
  13. 循环队列求元素个数为什么为(rear-front+maxSize)%maxSize?
  14. Q - Phalanx
  15. 键盘按钮keyCode对照表
  16. sftp命令复制文件
  17. linux系统如何安装adobe flash player
  18. android lottie字体json,从json文件到炫酷动画-Lottie实现思路和源码分析
  19. sdcc编译器使用makefile
  20. 【教程】Matrikon OPC使用教程连载(二)

热门文章

  1. java集合框架学习笔记
  2. 越睡越累,原因竟然是这个!
  3. 互动媒体技术——对十二个“一”的文艺创作作业进行文本分析、统计和可视化
  4. 手把手教你用熵值法计算权重
  5. 软链接解决存储空间不足
  6. 微信小程序 小星星样式
  7. ubuntu wifi bcm4322 安装驱动
  8. 微信小程序如何修改单页面背景色
  9. 解决QT接受串口数据时数据更新不及时,串口数据太多导致程序界面崩溃,串口接收数据过快等问题
  10. cisco交换机trunk与switchport access vlan vlan-id共存的问题