【操作步骤】正常收发短信、彩信。

【测试结果】所有短信均已阅读,但在HOME界面的短信图标仍提示有一条短信未读。重启后仍存在。

经过分析,导致该情况的主要原因为当彩信已读的时候,launcher中进行查询的语句有问题。因为当彩信的状态为已读后pdu表中的read字段的值会由0变为1,而彩信点击进行下载,下载成功后信息类型由130变为132.我们可以到处数据表进行下一步分析。

现在我们从数据库表中的数据进行分析,分析前我们需要解释一下,read的值为0表示未读,为1表示已读,m_type的值为130表示未下载,为132表示已下载。

我们从数据库表中可以看到当前信息状态全部为已读,而m_type中值为130的为条数为8条,132的值为2条,也就是说当前有8条彩信息未进行下载。按照正常的逻辑来说,在hotseat中不应该存在未读消息的提醒,但是在hotseat中提示未读消息为8条。因此我们断定该问题有查询语句所导致。我们找到launcher应用下Launcher.java中的相关方法进行分析:

private void updateDecorate(int whichIcon,ShortcutInfo info){

final ArrayList<ShortcutInfo> shortcuts = new ArrayList<ShortcutInfo>();
    if(info != null){
        shortcuts.add(info);
    }

getTargetShortcuts(whichIcon == UPDATE_MMS_ICON ? "com.android.mms" : "activities.DialtactsActivity",shortcuts);

if(shortcuts.size() == 0){
        return;
    }

new AsyncTask<Integer,Void,Integer>(){
        @Override
        protected Integer doInBackground(Integer... whichIcon){

int count = 0;

switch(whichIcon[0]){
                case UPDATE_MMS_ICON:
                    Cursor mmsCursor = getContentResolver().query(Uri.parse("content://mms/inbox"),
                            null,"m_type = 128 or m_type = 130 or m_type = 132 and read = 0",null,null);
                    if(mmsCursor != null){
                        count += mmsCursor.getCount();
                        mmsCursor.close();
                    }
                    Cursor smsCursor = getContentResolver().query(Uri.parse("content://sms"),null,"type = 1 and read = 0",null,null);
                    if(smsCursor != null){
                        count += smsCursor.getCount();
                        smsCursor.close();
                    }
                    break;
                case UPDATE_PHONE_ICON:

Cursor cursor = getContentResolver().query(Calls.CONTENT_URI,new String[]{
                                    Calls.NUMBER,Calls.TYPE,Calls.NEW},null,null,Calls.DEFAULT_SORT_ORDER);
                    if(cursor != null){
                        while(cursor.moveToNext()){
                            if((cursor.getInt(cursor.getColumnIndex(Calls.TYPE)) == Calls.MISSED_TYPE)
                                    && (cursor.getInt(cursor.getColumnIndex(Calls.NEW)) == 1)){
                                count++;
                            }
                        }
                        cursor.close();
                    }
                    break;
                default:
                    this.cancel(true);
                    break;
            }

return count;
        }

@Override
        protected void onPostExecute(Integer result){
            if(result != 0){
                for(ShortcutInfo shortcut : shortcuts){
                    if(shortcut.view != null){
                        shortcut.view.decorateIcon(String.valueOf(result));
                    }
                }
            } else{
                for(ShortcutInfo shortcut : shortcuts){
                    if(shortcut.view != null){
                        shortcut.view.clearDecorate();
                    }
                }
            }
        }
    }.execute(whichIcon);
}

上述代码中为原始代码,加粗标红的代码为查询语句的where子句部分,我们如果对数据库了解的话,我们会发现这里的优先级有个问题,因此我们做出修改,问题如下:、

"(m_type = 128 or m_type = 130 or m_type = 132 )and read = 0"

问题迎刃而解。

解决:HotSeat短信图标提醒有误相关推荐

  1. 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...

    华为手机短信提醒设置方法 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标②找到"应用程序管理" ③选择"默认应用设置"④ ...

  2. 苹果手机桌面找不到计算机,如果iPhone上的短信图标不见了怎么办? Apple 6s短信图标消失了...

    首先,信息图标被意外拖到桌面上的其他文件夹中,您可以转到电话桌面上的其他文件夹中以找到信息图标. 第二,关闭手机后重新启动搜索图标. 第三,通过恢复手机主屏幕的布局来检索信息图标. 这里以iPhone ...

  3. Launcher中拨号、短信图标加数字提示未接电话、未读短信数量

    之前尝试过使用BadgeView来实现,修改涉及地方太多了,后来换了这种方式 本文仅简单实现拨号.短信图标动态提示未读数目,若有更好方式实现的,欢迎交流 Launcher.java private f ...

  4. 如何利用数据挖掘平台,通过数据建模,解决垃圾短信带来的困扰

    如今,手机已经成为人们日常生活必不可少的工具之一.虽然各种社交APP层次不穷,但手机短信以其操作简单.方便快捷等诸多优点一直都是用户间沟通的基础方式.手机短信在为人们带来极大便利的同时,随之而来的诸多 ...

  5. 华为手机信息不弹屏了为什么_华为手机短信不提醒如何解决?四种方法来帮你!...

    华为手机短信提醒设置方法: 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标. ②找到"应用程序管理". ③选择"默认应用设置&qu ...

  6. 华为手机信息不弹屏了为什么_华为手机短信不提醒怎么办?华为手机短信提醒设置方法...

    华为手机短信提醒设置方法 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标②找到"应用程序管理" ③选择"默认应用设置"④ ...

  7. 不限机型、不安装APP,一招解决垃圾短信和电话骚扰

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 4 分钟. 来自:电脑报 在收到垃圾短信和骚扰电话时,你是选择置之不理还是主动还击? 我们都知道,现在国产安卓手机基本都自带骚 ...

  8. 华为P8桌面上的短信图标不见了怎么办

    最近娃在玩我手机的时候给我把支付宝.拨号.短信等图标都在桌面上弄没了,郁闷. 百度了很多方法,都不好用.历经一个月各种不方便之后,终于今天把它想办法解决了. 很简单,在手机桌面双指分离滑动,就会打开隐 ...

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

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

最新文章

  1. 免费试用人数太多,微软Windows 365云电脑服务器炸了,官方紧急暂停
  2. arcgis python工具-ArcGIS使用Python脚本工具
  3. 内存对齐指令详解(posix_memalign)
  4. Outlook Express 自動回信設定
  5. 01 能够使用Format实现格式化输出显示
  6. leetcode 67 Add Binary
  7. linux 只有命令指示,Linux命令行翻页?
  8. Android Camera架构浅析
  9. 2010工作代码总结之三(repostioryItemGridLookUpEdit下拉框)
  10. 光标移动事件。 gridview光标移动变色
  11. 抢红包插件实现原理浅析
  12. windows下安装禅道
  13. android 壁纸设置分析
  14. 几个超赞的颜色搭配网站,非常实用!强烈推荐!!
  15. DM8在银河麒麟服务器上配置Oracle19c的DBLINK服务
  16. ansible命令应用
  17. 大学专业计算机科学与技术主修课是什么,大学本科计算机科学与技术专业需要主修哪些课程...
  18. Android模拟自由落体运动
  19. Google Map 离线地图 - Ok Maps
  20. Mini RTK | 小巧精致、好测量

热门文章

  1. 5分钟入门Cinemachine智能相机系统
  2. 教你利用VMM虚拟机安装LEDE旁路由实现软路由超强功能的方法教程
  3. AirPods Pro好在哪
  4. 从事热爱的工作和积极乐观
  5. ArcGIS软件CAD数据通过转换建立GIS数据库
  6. 23行代码下载逆水寒壁纸图片
  7. 揭密Oracle之七种武器之三:破译古老的谜题---共享CBC Latch的秘密
  8. C语言 绘制漂亮的六叶图案
  9. 【电子书推荐】这几年看过的不错的电子书单
  10. html移动端适配最优方法