你们如果喝醉了,不知道看短信的时候点击短信url打开app的是不是已读,感觉是点击短信url打开app的已读,没点删除,

最近项目的聊天模块中增加了一个消息已读回执的功能,从技术上不是很难实现,但还是在这里记录一下,以便以后查阅。
所谓的消息已读回执,就是双方聊天时,如果对方看到了你新发的信息,这条消息在你这端就会标为“已读”,否则将是“未读”。
A发送一条消息给B,B接收了,如果B此时打开聊天主界面,查看了消息,B就再发一条“回执”(携带有B已读的消息Id)给A,A这时根据“回执”中的消息Id,标注已读。
那么根据整个功能流程,首先,我们要对消息model进行一下改造,增加一个状态位的属性toReadState,来区分消息是否被对方读了;还需要增加一个属性toReadMessageId,这个属性主要用在“回执”当中,用来告诉对方,我读了你的哪条消息,以便对方标注。
public int toReadS
public String toReadMessageId;
这样改造过后,如果消息带有toReadMessageId,那么它就不是一条消息,而是一条“回执”,而“回执”是不需要显示在会话列表或聊天面板中的,因此,我们需要在接收消息的时候判断一下,如果是“回执”,则不显示也不存储到数据库中。
接收消息主要有两个场景:1.会话列表 2.聊天主界面
因此在发送回执的时候也要根据场景分成两种情况,在会话列表中,我们肯定不能将消息状态置为已读,只有打开聊天主界面,并且此条消息在屏幕中时,才可以发送回执。因此,在我们打开主界面时,我们要判断一下有哪些消息是处于未读状态并且是处于当前屏幕上的,将这些状态的回执发给对方:
     * 批量发送回执给对方并更新界面和数据库
     * @param firstVisibleItem 屏幕中第一条可见消息
     */
    private void sendToReadMessage(int firstVisibleItem) {
        if (messageInfos != null && messageInfos.size() != 0) {
            
            SQLiteDatabase db = DBHelper.getInstance(mContext).getReadableDatabase();
            MessageTable messageTable = new MessageTable(db);
            for (int i = firstVisibleI i & messageInfos.size(); i++) {
                MessageInfo messageInfo = messageInfos.get(i);
                // 状态位为0,并且不能是自己发的消息
                if (messageInfo.toReadState == 0 && !messageInfo.fromid.equals(ResearchCommon.getUserId(mContext))) {
                    messageInfo.toReadState = 1;
//发送回执
                    sendReadState(messageInfo.id);
//保存到数据库中
                    messageTable.update(messageInfo);
//更新显示
                    mAdapter.notifyDataSetChanged();
                }
            }
        }
    }/**
* 发送回执给对方
* @param id 已读的MessageId
private void sendReadStatus(String id) {
MessageInfo msg = new MessageInfo();
msg.fromid = ResearchCommon.getUserId(mContext);
msg.tag = UUID.randomUUID().toString();
msg.fromname = mLogin.
msg.fromurl = mLogin.
msg.toid = fCustomerVo.
msg.toname = getFromName();
msg.tourl = fCustomerVo.
msg.typefile = MessageType.TEXT;
msg.content = &&;
msg.typechat = mT
msg.time = System.currentTimeMillis();
msg.readState = 1;
//告诉对方已读哪条信息
 msg.toReadMessageId =
sendBroad2Save(msg, false, true);
}在聊天主界面中发送回执则比较简单:// 接受消息
private void notifyMessage(final MessageInfo msg) {
if (msg == null) {
handler.post(new Runnable() {
public void run() {
// 当该信息不来自好友就过滤掉!
if (msg.getFromId().equals(ResearchCommon.getUserId(mContext))) {
//如果不是回执
if (msg.toReadMessageId.equals(&-1&)) {
messageInfos.add(msg);
//更新头像
updateUserHead(msg);
mAdapter.notifyDataSetInvalidated();
if (messageInfos.size() == 1
|| (mListView.getLastVisiblePosition() == messageInfos.size() - 2)) {
mListView.setSelection(messageInfos.size() - 1);
//发送已读回执
sendReadStatus(msg.id);
startDeleteTimer(msg);
//如果是回执的话就根据id更新已读状态
updateReadState(msg.toReadMessageId);
} catch (Exception e) {
}private void updateReadState(String id) {
if (mType == GlobleType.SINGLE_CHAT) {
for (int i = 0; i & messageInfos.size(); i++) {
final MessageInfo messageInfo = messageInfos.get(i);
if (id.equals(messageInfo.id)) {
messageInfo.toReadStatus = 1;
SQLiteDatabase db = DBHelper.getInstance(mContext).getReadableDatabase();
MessageTable messageTable = new MessageTable(db);
messageTable.update(messageInfo);
mAdapter.notifyDataSetInvalidated();
startDeleteTimer(messageInfo);
}还有一点需要注意的是,在监听新消息广播的时候也要判断一下该消息的类型,如果是回执类型就不要存储或在系统通知栏进行提示。
本文已收录于以下专栏:
相关文章推荐
1. 如何重新丢包问题
关于openfire丢包的问题还是比较
在上一篇提到了4个问题,现在开始回答第三个第四个问题。由于篇幅问题。这里就设置成了上下两篇
这个是第三个问题,如何做消息回执。
消息回执分为两种:
1、普通消息
2、延迟消...
1. socket 又称&套接字&
2. 网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket
3. 应用程序通常通过“套接字”向网络发出请求或者应答...
作为一名初学者错误疏漏之处在所难免,恳请各位批评指正。
即时通讯一般采用TCP/IP协议或者UDP协议进行通信,这两种都涉及终端ip地址的确定,对于PC而言ip地址是容易确定的,但对于android...
发送端和接收端都可以发送和接收信息,只是发送和接收消息的类型不同,一个是1,一个是2.具体代码如下:
//发送端#include
#include...
安卓蓝牙实现即时通讯功能本demo是《Android智能穿戴设备开发指南》书中的一块内容,实现了两台手机基于蓝牙进行即时通讯的功能
原文:java
Smack整合Openfire服务器实现IM即时通讯聊天功能
源代码下载地址:/share/2224.h...
Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能
前面几篇一直在讲一些基础,其实说实话,蓝牙主要为多的还是一些概念性的东西,当你把概念都熟悉了之后,你会很简单的就可以实现一...
1.WebSocket的简要说明
WebSocket protocol是html5的一种新的协议,它实现了浏览器与服务器全双工通信。
现在很多网络为了实现浏览器与服务器的即时通信,使用的是轮询技术。...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)手机短信已读,怎么还显示有未读短信。怎么处理?
按时间排序
如果仅是锁屏状态下或是通知栏中的预读短信的话一般手机还是会提示有没有读取的手机短信,此时直接点击短信应用即可。
你好,可能是系统出错的原因,楼主可以重启手机试试是否还有未读信息。还有楼主有没有装安全软件,如果有拦截信息也会显示未读短信,去软件里面拦截信息看看的。
您可以邀请优质答主更快回答您的问题
擅长领域:&&&&
在手机数码分类下共有89255个回答
擅长领域:&&
在手机数码分类下共有20850个回答
擅长领域:
在手机数码分类下共有10925个回答
擅长领域:&&&&
在手机数码分类下共有9295个回答
yuanzhangtongxue
擅长领域:
在手机数码分类下共有7577个回答
擅长领域:&&&&
在手机数码分类下共有6983个回答
加载更多答主
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将会做出处理感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动?经验18285 米
在线时间714 小时
版本7.9.28
机型小米MIX
签到次数187
MIUI版本7.9.28
小米手机2S
系统为4.7.18 体验版。这问题已经好久了。而且经常出现。在来短信的短信弹窗上点击关闭后。短信却仍然为未读状态。不仅如此。就算是在短信弹窗上点击删除按钮,可是短信却仍然在短信箱里。
这问题估计已经出现快半年了。可是为什么现在没解决。我反馈也不知道多少次了。而且每次log都给你们提交了。这次就不提交了。因为今天没来短信。给你们也没用。不过希望你们用自己手机多的试试,特别是在收到通知类短信时几乎都会有这问题。联系人短信可能问题出现的几率会比较小
系统为4.7.18 体验版。这问题已经好久了。而且经常出现。在来短信的短信弹窗上点击关闭后。短信却仍然为未读状态。不仅如此。就算是在短信弹窗上点击删除按钮,可是短信却仍然在短信箱里。
这问题估计已经出现快半年了。可是为什么现在没解决。我反馈也不知道多少次了。而且每次log都给你们提交了。这次就不提交了。因为今天没来短信。给你们也没用。不过希望你们用自己手机多的试试,特别是在收到通知类短信时几乎都会有这问题。联系人短信可能问题出现的几率会比较小
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验2390 米
在线时间311 小时
积分 3309, 距离下一级还需 1691 积分
积分 3309, 距离下一级还需 1691 积分
机型小米手机2/2S
签到次数109
MIUI版本7.6.8
请善用论坛搜索、
这BUG已经有提交了!
经验5308 米
在线时间134 小时
版本V8.5.1.0.MBECNED
积分 5827, 距离下一级还需 14173 积分
积分 5827, 距离下一级还需 14173 积分
机型红米手机4 高配版
签到次数105
MIUI版本V8.5.1.0.MBECNED
没log文件……??
经验18285 米
在线时间714 小时
版本7.9.28
机型小米MIX
签到次数187
MIUI版本7.9.28
请善用论坛搜索、
这BUG已经有提交了!
提交了。但是解决了吗?这么大这么明显的问题。这都多久了。就是没解决。反馈了好几次,开发组就是没承认这是个bug'',就是没说有没有在解决。解决这个bug用的着半年吗。如果真是这样。开发组真该集体回家卖冰棒
经验18285 米
在线时间714 小时
版本7.9.28
机型小米MIX
签到次数187
MIUI版本7.9.28
没log文件……??
原因我已经在帖子里说明了。而且这么明显的问题。很容易实现吧。开发组自己测试一下真这么难?
经验167154 米
威望2142 米
在线时间0 小时
版本7.9.28
我是大水逼
机型小米Note 3
签到次数199
MIUI版本7.9.28
这个BUG已经有人提过。。。。
各位开发组以及其他官方人员你好,如果我的回复有错误,在你不忙的时候请麻烦回复我纠正下,谢谢
做下广告,
经验88698 米
威望335 米
在线时间3260 小时
版本7.9.27
R U OK?丨迪奥瑞斯·馒丨不定时巡逻丨
机型小米手机6
签到次数220
MIUI版本7.9.27
这问题我也遇到过,有时候点发送根本没有发出去,感觉抓LOG抓不到啊。偶尔而已,不是经常
经验1470 米
在线时间86 小时
版本4.10.24
耍猴组荣誉大组长
积分 1803, 距离下一级还需 197 积分
积分 1803, 距离下一级还需 197 积分
机型小米手机2/2S
签到次数17
MIUI版本4.10.24
这个,真是出现n多次了= =
小米7周年勋章
2017米粉节晒单赢专属勋章
MIUI 300周
MIUI 300周更新纪念勋章
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
MIUI三周年
MIUI三周年纪念勋章
已关注极客秀微信
已关注微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI六周年
MIUI六周年纪念勋章
小米5发布会
参加小米5发布会直播页大转盘抽奖获得
米兔月饼勋章
参加回帖活动
MIUI七夕鹊桥勋章
MIUI七周年
MIUI 9纪念勋章
小米众筹2周年
参加回帖活动
新版论坛APP
更新新版APP
“澎湃S1 ”芯片纪念勋章
参与活动回帖可得
参与红米Note 4X活动
2017年小金鸡勋章
回复2016年度评选活动贴
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
小火箭勋章
神舟11号 话题活动
内测督查勋章
内测督查员专属勋章
小米商城购买纪念勋章
论坛APP购买小米商品获得
解答组专属勋章
解答组专属勋章
小米平板2 Win10 荣誉内测
小米平板2 Win10 荣誉内测
圣诞节勋章
参与圣诞活动
为奥运加油勋章
为奥运加油勋章
MIUI 8纪念勋章
MIUI 8纪念勋章
小米六周年
小米六周年米粉节
参加流量购买活动
发烧友俱乐部
发烧友俱乐部
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号IPHONE手机接收短信没有实时通知,要打开短信栏才知道有短信阅读,是什么原因?
全部答案(共1个回答)
短信图标显示有未读,而打开后并没有新来的信息,有一种可能,是垃圾短信,被安装的拦截软件拦截了。我就安装了一个拦截软件,来垃圾短信会提示有信息来,但不显示。
微信软件的问题,以后有新版本会改好的了,就是说,你现在什么也不用办。等新版本发布。或者可以向微信助手反馈一下
是不是你的短信里的设置里没有搞好..就是那个信息中心号码..一般都是:+0
前面有一定有"+"并且86后面一定要是十一位数..其实这...
你可以到系统的声音设置里面设置声音,然后到微博的设置里面设置推送提醒。
答: 39+4了,可以用催产素吗?或者是塞药开宫口
答: 美国苹果公司的新款手机,全触屏的智能机,在中国卖的很贵。
答: 手机购买还是找正规卖家
天猫等网站
答: 可能被设置了禁言你IP接入吧
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415}

我要回帖

更多关于 营销短信点击率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信