Android Smack 消息事件监听器

2023-12-03

我正在尝试使用 XMPP 的消息事件接口。据我了解,您可以在发送的消息上标记“请求送达通知”标志,然后收件人负责向您发送此通知。有人成功实施过这个吗?有人可以给我发送一些示例代码吗?我的代码不起作用。我的侦听器(MessageEventNotificationListener、MessageEventRequestListener)的回调永远不会被调用:

@Override
public void onCreate( Bundle savedInstanceState )
{
    super.onCreate( savedInstanceState );
    setContentView( R.layout.chat );

    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
    VajasKifli.connection.addPacketListener( this, filter );

    tv = ( TextView ) findViewById( R.id.textView1 );
    tvState = ( TextView ) findViewById( R.id.textView2 );
    et = ( EditText ) findViewById( R.id.editText1 );
    et.addTextChangedListener( this );

    mem = new MessageEventManager( VajasKifli.connection );
    mem.addMessageEventNotificationListener( this );
    mem.addMessageEventRequestListener( this );

    sdm = new ServiceDiscoveryManager( VajasKifli.connection );
    VajasKifli.log( "sdm: " + sdm );

    stateManager = ChatStateManager.getInstance( VajasKifli.connection );

    recipient = getIntent().getStringExtra( "recipient" );
    chat = VajasKifli.connection.getChatManager().createChat( recipient, "chat-" + recipient, this );
    VajasKifli.log( "chat created: " + chat );

    VajasKifli.connection.getChatManager().addChatListener( this );

    sv = ( ScrollView ) findViewById( R.id.scrollView1 );

    handler = new ChatHandler();
}

public void onClickSend( View view )
{
    String text = et.getText().toString();
    if( text.length() > 0 )
    {
        VajasKifli.log( "sending text [" + text + "] to [" + recipient + "]" );

        try
        {
            Message message = new Message();
            message.setBody( text );
            MessageEventManager.addNotificationsRequests( message, false, true, false, false );
            chat.sendMessage( message );

            stateManager.setCurrentState( ChatState.active, chat );
            lastState = ChatState.active;
            tv.append( "\n" + VajasKifli.connection.getUser().replaceFirst( "@.*", "" ) + ": " + text );
            sv.fullScroll( ScrollView.FOCUS_DOWN );
        }
        catch( XMPPException e )
        {
            VajasKifli.logError( e.toString() );
        }

        //showToast( "sent: " + text );
    }
}

您应该通过wireshark 或通过smack 调试选项获取XMPP 连接的数据包跟踪,以确保传送通知确实是由连接的另一端发送的。如果没有,这就能解释为什么没有调用听众。

SMACK 中的消息事件是通过现已过时的XEP-22。对方很可能没有实施这种过时的机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Smack 消息事件监听器 的相关文章

随机推荐

  • Firestore serverTimestamp() 未定义

    Problem 我设置了一个可调用的云函数 它使用 Admin SDK node js 写入 Firestore const admin require firebase admin const functions require fire
  • 在集群环境中使用 Quartz

    我希望在我的应用程序中使用quartz调度程序 因为我有一个集群环境 并且希望保证每小时只运行一个作业实例 我的问题是 我是否必须使用 JDBC 作业存储或某种作业数据的 外部 存储来保证集群中的实例在任何给定时间仅运行一次作业 或者 Qu
  • 比较不同的“使用参数启动 Cocoa 应用程序”方法

    我发现至少有三种方法可以从应用程序启动 Mac OS X 上的应用程序 NSTask 我可以给出参数 但似乎它不是针对 Cocoa 应用程序 而是针对 UNIX 风格的二进制文件 系统函数 system 与 C 的方式相同 我不知道为什么
  • Python 线程和 PySimpleGUI

    根据 MikeyB 的解决方案进行了修改 感谢 Mikey 指出了一个简单的解决方案 我觉得有时候解决方案需要考虑太多 而一个简单的开销解决方案就可以解决问题 我添加了一个小函数 该函数循环遍历我想要监视的目录 并将变量设置为 True 或
  • ListView onItemClick 从数据库获取行?

    我对 Android 开发相当陌生 我有一个自定义 ListView 其中填充了数据库表中的数据 ListView 项目由类别 日期 标题和金额组成 private class lvIncomeListener implements Ada
  • dyld:未加载库:@rpath/libswiftCore.dylib

    我正在尝试在我的 iPhone 4s 上运行 Swift 应用程序 在模拟器上运行得很好 我朋友在他的iPhone 4s上也能成功运行 我有 iOS 8 和 Xcode 6 的正式版本 我努力了 重新启动 Xcode iPhone 电脑 清
  • 如何为 Amazon EC2 创建 IAM 角色?

    我正在探索 IAM 角色 我想知道如何代表 EC2 上的用户访问角色 非常感谢任何帮助 Thanks 在使用以下命令启动 EC2 实例后 您通常不需要执行任何特殊操作 Amazon EC2 的 IAM 角色 我从你重复的问题中发现 你已经这
  • SyntaxError:NextJS 身份验证集成中出现意外的令牌“导出”

    我一直在使用 Next js 使用 next auth 和 Prisma 开发一个网站 一切都工作正常 但是今天代码不再工作了 我刚刚从以下任何页面收到此错误 nextauth js Server Error SyntaxError Une
  • 如何从地理编码地址查找 lat lng?

    我正在尝试创建一个 Gmap 来允许人们对地址进行地理编码并找到相应的经纬度 我希望在我已经创建的表单中看到这一点 另外 我希望能够在拖动标记时更改坐标
  • 如何从不同线程绘制opengl图形?

    我想制作一个 opengl 应用程序来显示一些 3d 图形和命令行 我想让它们分开线程 因为它们都是繁重的进程 我认为我可以用 2 个不同的视口来解决这个问题 但我想知道如何处理 opengl 中的线程 根据我读到的内容 Opengl 是异
  • 撤消 TFS 取消搁置

    我使用的是 Visual Studio 2015 TFS 的版本是 2012 版本 11 0 51106 1 有没有办法撤消取消搁置 其他人的用户搁置集 以达到以前取消搁置命令的情况 不 没有这个命令 Unshelving这是将搁架组恢复到
  • Android 轮播图库

    我怎样才能轮播图片库 它永远不会结束 在最后一张图片之后和第一张最后一张图片之前 我通过创建自己的列表适配器 继承自 基础适配器 我以 getCount 方法的方式编写了自己的列表适配器 返回一个 HUUUUGE 数字 如果选择 x 项 则
  • 没有 CocoaPods 的 Google 登录

    我正在尝试将 iOS 版 Google 登录与此处找到的文档集成 https developers google com identity sign in ios start integrating 在不使用 Cocoapods 的情况下如
  • 从 List 到数组 T[] 的转换

    有没有一种简单的方法来转换强类型List
  • PDFBox LayerUtility - 将图层导入现有 PDF

    我正在使用 pdfbox 来操作 PDF 内容 我有一个很大的 PDF 文件 比如 500 页 我还有其他一些仅包含单个图像的单页 PDF 文件 每个文件最大约为 8 15kb 我需要做的是将这些单页 pdf 导入到大 PDF 文件的某些页
  • 为什么 SQL Server 2014 数据库项目的 SqlPublish 目标失败?

    我的计算机具有当前 2014 年 3 月 版本的 SSDT Visual Studio 2012 Professional 和 SQL Server 2014 Developer 我有一个 SQL Server 项目 我们称之为MyProj
  • 克隆对象并更改值也会改变原始对象

    我想知道为什么会发生这种情况 我有一个对象存储在 var myObj 中 var myObj JSON parse fs readFileSync json data json utf8 然后我通过以下方式从原始对象中获取克隆 var mo
  • 如何使div的百分比宽度相对于父div而不是视口

    这是我正在使用的 HTML div style min width 100 min height 1000px background 3e3e3e div style width 50 height 1 div style backgrou
  • 初始化未知大小的二维数组

    我有一个二维字符数组 例如char aList numStrings maxLength 理想情况下 在程序执行期间 我希望能够修改 aList 的内容 即添加 修改或删除条目 由于 aList 可能会发生更改 因此我不想在每次更改后都必须
  • Android Smack 消息事件监听器

    我正在尝试使用 XMPP 的消息事件接口 据我了解 您可以在发送的消息上标记 请求送达通知 标志 然后收件人负责向您发送此通知 有人成功实施过这个吗 有人可以给我发送一些示例代码吗 我的代码不起作用 我的侦听器 MessageEventNo