我正在 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/