Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当android聊天应用程序处于后台时,如何接收消息作为通知_Android_Socket.io - Fatal编程技术网

当android聊天应用程序处于后台时,如何接收消息作为通知

当android聊天应用程序处于后台时,如何接收消息作为通知,android,socket.io,Android,Socket.io,我正在开发一个android即时聊天应用程序。我使用socket.io-client库实现了它。这里一切正常。当应用程序将由不同的用户在不同的设备上使用时,可以使用socket将消息从一个用户发送到另一个用户。但这只有在应用程序处于活动状态时才可能。如果应用程序在另一端未处于活动状态,它工作不正常。我想通知用户消息已与WatsApp一样到达。如何使用套接字实现此目的 以下是我的侦听器的代码: 我必须处理两个通知案例: 1.当应用程序处于后台时 2.当来自用户C的消息到达时,当应用程序在前台但用户

我正在开发一个android即时聊天应用程序。我使用socket.io-client库实现了它。这里一切正常。当应用程序将由不同的用户在不同的设备上使用时,可以使用socket将消息从一个用户发送到另一个用户。但这只有在应用程序处于活动状态时才可能。如果应用程序在另一端未处于活动状态,它工作不正常。我想通知用户消息已与WatsApp一样到达。如何使用套接字实现此目的

以下是我的侦听器的代码:

我必须处理两个通知案例: 1.当应用程序处于后台时 2.当来自用户C的消息到达时,当应用程序在前台但用户A正忙于用户B时


请帮助我解决我的问题。

按此处所述创建后台服务, 写入此服务中的套接字连接代码,从启动器活动启动服务,并通过从其他活动绑定到服务来使用该服务 当应用程序启动时,您应该使用START_STICKY运行自己的服务,并且在该服务中必须启动一个线程。参考请参考android服务文档

2另一种方法是使用GCM推送通知。在onResume和onPasue中,即在前台,如果用户转到后台,则onResume连接到socket.io服务器,然后断开用户与socket.io服务器的连接。如果用户从socket.io服务器断开连接,则返回到GCM推送通知,并通知用户。

尝试以下操作:

public Emitter.Listener handleIncomingMessages = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
                String message = null;
                String imageText;
                try {
                    message = data.getString("message").toString();
                  Log.v("messageeeeeeeeeee",message);

                } catch (JSONException e) {
                    // return;
                }

                addMessage(message);

                try {
                    imageText = data.getString("image");
                    addImage(decodeImage(imageText));
                } catch (JSONException e) {
                    //retur
                }
            }
        });
    }
};

您可以创建后台服务并使用套接字保持连接的活动状态,也可以使用推送通知,即如果其他用户未连接到套接字,服务器应发送推送消息。感谢您的回复。您可以发送一些链接给我学习吗?我已使用推送通知实现了相同的功能。请在中进行解释详细信息。按此处所述创建后台服务,写入此服务中的套接字连接代码,从启动程序活动启动服务,并通过从其他活动绑定到该服务来使用该服务。请告诉我是否必须使用IntentService或BoundService或service类来实现该概念。您必须使用service而不是IntentService。服务也称为绑定服务
public Emitter.Listener handleIncomingMessages = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
                String message = null;
                String imageText;
                try {
                    message = data.getString("message").toString();
                  Log.v("messageeeeeeeeeee",message);

                } catch (JSONException e) {
                    // return;
                }

                addMessage(message);

                try {
                    imageText = data.getString("image");
                    addImage(decodeImage(imageText));
                } catch (JSONException e) {
                    //retur
                }
            }
        });
    }
};