解决:HotSeat短信图标提醒有误
【操作步骤】正常收发短信、彩信。
【测试结果】所有短信均已阅读,但在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短信图标提醒有误相关推荐
- 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...
华为手机短信提醒设置方法 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标②找到"应用程序管理" ③选择"默认应用设置"④ ...
- 苹果手机桌面找不到计算机,如果iPhone上的短信图标不见了怎么办? Apple 6s短信图标消失了...
首先,信息图标被意外拖到桌面上的其他文件夹中,您可以转到电话桌面上的其他文件夹中以找到信息图标. 第二,关闭手机后重新启动搜索图标. 第三,通过恢复手机主屏幕的布局来检索信息图标. 这里以iPhone ...
- Launcher中拨号、短信图标加数字提示未接电话、未读短信数量
之前尝试过使用BadgeView来实现,修改涉及地方太多了,后来换了这种方式 本文仅简单实现拨号.短信图标动态提示未读数目,若有更好方式实现的,欢迎交流 Launcher.java private f ...
- 如何利用数据挖掘平台,通过数据建模,解决垃圾短信带来的困扰
如今,手机已经成为人们日常生活必不可少的工具之一.虽然各种社交APP层次不穷,但手机短信以其操作简单.方便快捷等诸多优点一直都是用户间沟通的基础方式.手机短信在为人们带来极大便利的同时,随之而来的诸多 ...
- 华为手机信息不弹屏了为什么_华为手机短信不提醒如何解决?四种方法来帮你!...
华为手机短信提醒设置方法: 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标. ②找到"应用程序管理". ③选择"默认应用设置&qu ...
- 华为手机信息不弹屏了为什么_华为手机短信不提醒怎么办?华为手机短信提醒设置方法...
华为手机短信提醒设置方法 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标②找到"应用程序管理" ③选择"默认应用设置"④ ...
- 不限机型、不安装APP,一招解决垃圾短信和电话骚扰
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 4 分钟. 来自:电脑报 在收到垃圾短信和骚扰电话时,你是选择置之不理还是主动还击? 我们都知道,现在国产安卓手机基本都自带骚 ...
- 华为P8桌面上的短信图标不见了怎么办
最近娃在玩我手机的时候给我把支付宝.拨号.短信等图标都在桌面上弄没了,郁闷. 百度了很多方法,都不好用.历经一个月各种不方便之后,终于今天把它想办法解决了. 很简单,在手机桌面双指分离滑动,就会打开隐 ...
- 求android实现未读短信图标数字提示效果
============问题描述============ 大家好, 我现在碰到一个需求是在一个图标上面加上一个数字,来提示有未读短信之类的效果. 效果图片发不出来,不知道是不是CSDN不让发,有知道的 ...
最新文章
- 免费试用人数太多,微软Windows 365云电脑服务器炸了,官方紧急暂停
- arcgis python工具-ArcGIS使用Python脚本工具
- 内存对齐指令详解(posix_memalign)
- Outlook Express 自動回信設定
- 01 能够使用Format实现格式化输出显示
- leetcode 67 Add Binary
- linux 只有命令指示,Linux命令行翻页?
- Android Camera架构浅析
- 2010工作代码总结之三(repostioryItemGridLookUpEdit下拉框)
- 光标移动事件。 gridview光标移动变色
- 抢红包插件实现原理浅析
- windows下安装禅道
- android 壁纸设置分析
- 几个超赞的颜色搭配网站,非常实用!强烈推荐!!
- DM8在银河麒麟服务器上配置Oracle19c的DBLINK服务
- ansible命令应用
- 大学专业计算机科学与技术主修课是什么,大学本科计算机科学与技术专业需要主修哪些课程...
- Android模拟自由落体运动
- Google Map 离线地图 - Ok Maps
- Mini RTK | 小巧精致、好测量