android - 聊天应用程序 - Smack 4.1 Android IntentService - 发送消息

标签 android xmpp chat smack

我正在 Android 中使用 Smack 4.1 创建聊天应用程序。我已经实现了一个 IntentService,它创建连接并在用户登录应用程序后将用户登录到 xmpp 中。我使用以下代码从 fragment 启动 Intent 服务,效果很好:

chatIntent = new Intent(mContext, ChatService.class);
chatIntent.setAction(XMPP_ACTION_CONNECT);
mContext.startService(chatIntent);

然后我尝试从 fragment 发送消息。我尝试使用与上面相同的代码

Intent sendmsgIntent = new Intent(mContext, ChatService.class);
sendmsgIntent.putExtra("msg",messageText);
sendmsgIntent.putExtra("to",companionLabel.getText().toString());
sendmsgIntent.setAction(ACTION_SEND_MESSAGE);
mContext.startService(sendmsgIntent);

但是当 IntentService 中收到 Intent 时,XMPPTCPConnection 连接为空,我无法使用:

connection.sendStanza(message);

为什么这个是空的?服务会从头开始吗? 我用这种方式发送第二个 Intent 是否错误? 或者我如何获得发送第一个 Intent 时创建的 XMPPTCPConnection 连接?

最佳答案

是的,IntentService只是在后台线程中执行onHandleIntent,然后就被销毁了。

而是使用可以与 fragment 和 Activity 绑定(bind)的普通服务,以使其在其生命周期内可用;实际上有一些不错的文档: http://developer.android.com/guide/components/bound-services.html#Binding 该服务将在 UI 线程上运行,因此您需要在新线程或 AsyncTasks 中执行 Smack 网络调用。

关于android - 聊天应用程序 - Smack 4.1 Android IntentService - 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31426291/

相关文章:

java - Java 中的重载泛型

android - 如何保持与 Smack XMPP 的连接?

android - 如何在smack中实现消息确认

Android - 使用 parse 和 pubnub 在随机聊天应用程序中正确配对和连接两个用户

android - 蓝牙聊天仅适用于 android sdk 3.0?

android - 找不到 Quickblox 的 StickersManager 类

android - 在 Android 按钮中实现滑动和单击

android - UIAuitomator 代码错误

java - Android Java Firebase 查询对象到 ArrayList 中

java - 如何使用 Smack XMPP API 处理(失败)登录尝试