IM的一般逻辑:
实现一个Service
, 用于接收推送消息(即注册SDK的TIMMessageListener
), 然后调用Context.sendOrderedBroadcast(Intent, String)
有序广播消息
实现一个android:priority="-999"
的BroadcastReceiver
, 并在AndroidManifest.xml中注册, 用于接收Service
发送出来的有序广播, 并通过Notification
发送到状态栏. 由于级别很低, 因此, 它会最后接收到上述广播
在Activity
/Fragment
里注册BroadcastReceiver
用于接收上述有序广播, 由于这个BroadcastReceiver
的默认级别要比2中注册的BroadcastReceiver
的要高, 因此会优先接收到广播, 在这里我们就可以做拦截处理(代码如下): 会话页面打开后, 不再通过状态栏通知收到新消息. Activity
/Fragment
关闭时, 反注册上述BroadcastReceiver
, 这时, 又恢复了状态栏的新消息提醒通知.
private BroadcastReceiver mReceiverInActivityOrFragment = new BroadcastReceiver() {
// TODO ...
setResultCode(Activity.RESULT_CANCELED);
}
关键知识点:
有序广播
私有权限
参考书籍:
p.s. 答主不是书托, 这本书答主已经完整地看完了, 书上的知识点和官方文档基本都是对应的, 相当于一本官方文档的中文书籍, 另外又比较切合题主的问题, 因此推荐下, 英文电子档可以从网上下载.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…