Android集成腾讯云通信关于全局消息监听的实现
伊谢尔伦
伊谢尔伦 2017-04-18 09:16:06
[Android讨论组]

在Android集成腾讯云通信的时候遇到一个问题。在Activity中实现了腾讯云通信SDK里的TIMMessageListener类后通过onNewMessage方法接收云端的新消息。
但是,这个监听方法并不能在每个Activity里面实现。
1Activity里面实现了这个方法,并且在测试中接收到了新消息,但是跳转到2Activity之后再次实现了这个方法,并且在测试中也接收到了新消息,再返回到1Activity后就无法监听到新消息了,目测是因为在2Activity中这个方法被重新实现,所以之前实现的监听就报废了,当2Activity被销毁后,1Activity里面的监听无法恢复。
这是我碰到的问题。
我想问一下各位大神,该如何设计这个即时通讯功能。
比如说我需要在每个页面都监听新消息以便发送Notification,另外,需要给部分页面的图标增加角标,顺便在会话页面实现聊天过程。
本人刚刚入门,不是很了解整个流程,请大神指教。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
怪我咯

IM的一般逻辑:

  1. 实现一个Service, 用于接收推送消息(即注册SDK的TIMMessageListener), 然后调用Context.sendOrderedBroadcast(Intent, String)有序广播消息

  2. 实现一个android:priority="-999"BroadcastReceiver, 并在AndroidManifest.xml中注册, 用于接收Service发送出来的有序广播, 并通过Notification发送到状态栏. 由于级别很低, 因此, 它会最后接收到上述广播

  3. Activity/Fragment里注册BroadcastReceiver用于接收上述有序广播, 由于这个BroadcastReceiver的默认级别要比2中注册的BroadcastReceiver的要高, 因此会优先接收到广播, 在这里我们就可以做拦截处理(代码如下): 会话页面打开后, 不再通过状态栏通知收到新消息. Activity/Fragment关闭时, 反注册上述BroadcastReceiver, 这时, 又恢复了状态栏的新消息提醒通知.

private BroadcastReceiver mReceiverInActivityOrFragment = new BroadcastReceiver() {
    // TODO ...
    setResultCode(Activity.RESULT_CANCELED); 
}

关键知识点:

  1. 有序广播

  2. 私有权限

参考书籍:

  • Android编程权威指南 第2版 第27章-Broadcast Intent (第一版是第30章, 英文版如下)

  • Android Programming: The Big Nerd Ranch Guide

p.s. 答主不是书托, 这本书答主已经完整地看完了, 书上的知识点和官方文档基本都是对应的, 相当于一本官方文档的中文书籍, 另外又比较切合题主的问题, 因此推荐下, 英文电子档可以从网上下载.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号