大佬教程收集整理的这篇文章主要介绍了android – 如何实现消息读取状态,如whatsapp蓝色刻度?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
DeliveryReceiptManager.geTinstanceFor(connection).enableAutoReceipts(); DeliveryReceiptManager.geTinstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener() { @Override public void onReceiptReceived(String arg0,String arg1,String arg2) { Log.v("app",arg0 + "," + arg1 + "," + arg2); } });
但我需要表明该消息是用户READ或NOT whatsApp蓝色tickmark,
任何人都可以帮助我,我被击中了.如何实现此消息读取概念.
提前致谢.
public class ReadReceipt implements PacketExtension { public static final String NAMESPACE = "urn:xmpp:read"; public static final String ELEMENT = "read"; private String id; /// original ID of the delivered message public ReadReceipt(String id) { this.id = id; } public String getId() { return id; } @Override public String getElementName() { return ELEMENT; } @Override public String getNamespace() { return NAMESPACE; } @Override public String toXML() { return "<read xmlns='" + NAMESPACE + "' id='" + id + "'/>"; } public static class Provider extends EmbeddedExtensionProvider { @Override protected PacketExtension createReturnExtension(String currentElement,String currentNamespace,Map<String,String> attributeMap,List<? extends PacketExtension> content) { return new ReadReceipt(attributeMap.get("id")); } } }
message message = new message(userJid); ReadReceipt read = new ReadReceipt(messagePacketID); message.addExtension(read); mConnection.sendPacket(sendReadStatus);
其中mConnection是xmmppConnection对象
将数据包扩展添加到消息对象
在连接到服务器之前,将此扩展提供程序添加到ProvideRMANager
ProvideRMANager.geTinstance().addExtensionProvider(ReadReceipt.ELEMENT,ReadReceipt.nameSPACE,new ReadReceipt.Provider());
创建packetListener类以从接收器接收读取收据
public class ReadReceiptManager implements PacketListener { private static Map<Connection,ReadReceiptManager> instances = Collections.synchronizedMap(new WeakHashMap<Connection,ReadReceiptManager>()); static { Connection.addConnectionCreationListener(new ConnectionCreationListener() { public void connectionCreated(Connection connection) { geTinstanceFor(connection); } }); } private Set<ReceiptReceivedListener> receiptReceivedListeners = Collections.synchronizedSet(new HashSet<ReceiptReceivedListener>()); private ReadReceiptManager(Connection connection) { serviceDiscoverymanager sdm = serviceDiscoverymanager.geTinstanceFor(connection); sdm.addFeature(ReadReceipt.nameSPACE); instances.put(connection,this); connection.addPacketListener(this,new PacketExtensionFilter(ReadReceipt.nameSPACE)); } public static synchronized ReadReceiptManager geTinstanceFor(Connection connection) { ReadReceiptManager receiptManager = instances.get(connection); if (receiptManager == null) { receiptManager = new ReadReceiptManager(connection); } return receiptManager; } @Override public void processPacket(Packet packet) { ReadReceipt dr = (ReadReceipt)packet.getExtension(ReadReceipt.ELEMENT,ReadReceipt.nameSPACE); if (dr != null) { for (ReceiptReceivedListener l : receiptReceivedListeners) { l.onReceiptReceived(packet.getFrom(),packet.getTo(),dr.getId()); } } } public void addReadReceivedListener(ReceiptReceivedListener listener) { receiptReceivedListeners.add(listener); } public void removeRemoveReceivedListener(ReceiptReceivedListener listener) { receiptReceivedListeners.remove(listener); } }
ReadReceiptReceivedListener readListener = new ReadReceiptReceivedListener() { @Override public void onReceiptReceived(String fromJid,String toJid,String packetId) { Log.i("Read","message Read successfully"); } }; ReadReceiptManager.geTinstanceFor(connection).addReadReceivedListener(readListener);
以上是大佬教程为你收集整理的android – 如何实现消息读取状态,如whatsapp蓝色刻度?全部内容,希望文章能够帮你解决android – 如何实现消息读取状态,如whatsapp蓝色刻度?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。