android创建多个websocket,java – Android WebSocket服务进行多个连接

我创建了一个Web Socket服务.但它保持多重连接

我只是希望应用程序建立一个连接,除非网络连接丢失然后再建立另一个连接.

但是现在,如果按下手机上的主页按钮,它会建立一个连接.并返回应用程序,它将进行另一个连接.

谢谢你的帮助.

onCreate …我的MainActivity

Intent startServiceIntent = new Intent(this, WebSocketServices.class);

startService(startServiceIntent);

表现

android:name="com.example.basicplayerapp.core.NetworkReceiver">

NetworkReceiver

public class NetworkReceiver extends BroadcastReceiver {

public static final String TAG = HomeActivity.class.getSimpleName();

@Override

public void onReceive(Context context, Intent intent) {

ConnectivityManager conn = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = conn.getActiveNetworkInfo();

if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {

Log.i(TAG, "connected");

Intent startServiceIntent = new Intent(context, WebSocketServices.class);

context.startService(startServiceIntent);

}

else if(networkInfo != null){

NetworkInfo.DetailedState state = networkInfo.getDetailedState();

Log.i(TAG, state.name());

}

else {

Log.i(TAG, "lost connection");

}

}//end onReceive

};//end NetworkReceiver

WebsocketServices

public class WebSocketServices extends IntentService {

public static final String TAG = WebSocketServices.class.getSimpleName();

private static String SOCKET_ADDR = "http://171.0.0.1:8080";

private String message = null;

private WebSocket socket = null;

public WebSocketServices() {

super("DownloadService");

}

@Override

protected void onHandleIntent(Intent intent) {

Log.i(TAG, "onHandleIntent");

//SOCKET_ADDR = intent.getStringExtra("ip");

if(socket==null || !socket.isOpen() || socket.isPaused())

connectToPASocket(SOCKET_ADDR);

Log.d(TAG,"Service Invoke Function");

}//end onHandleIntent

//=====================================================================================

// Socket connection

//=====================================================================================

private void connectToPASocket(String SOCKET_ADDR) {

Log.i(TAG, "connectToPASocket()");

// Checking

if (socket != null && socket.isOpen()) return;

// Initiate web socket connection

AsyncHttpClient.getDefaultInstance().websocket(SOCKET_ADDR, null,

new AsyncHttpClient.WebSocketConnectCallback() {

@Override

public void onCompleted(Exception ex, WebSocket webSocket) {

Log.i(TAG, "onCompleted");

if (ex != null) {

Log.i(TAG, "onCompleted > if (ex != null)");

ex.printStackTrace();

return;

}

socket = webSocket;

socket.setStringCallback(new StringCallback() {

public void onStringAvailable(String s) {

Log.i(TAG, "socket.setStringCallback > onStringAvailable - s => " + s);

System.out.println("I got a string: " + s);

message = s;

}// end onStringAvailable

});// end socket.setStringCallback

socket.setDataCallback(new DataCallback() { // Find out what this does

@Override

public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {

Log.i(TAG, "socket.setDataCallback > onDataAvailable | emitter=> " + emitter + " | bb => " + bb);

System.out.println("I got some bytes!");

// note that this data has been read

bb.recycle();

}

});// end webSocket.setDataCallback

}// end onCompleted

});// end AsyncHttpClient.getDefaultInstance()

}// end connectToPASocket

}//end WebSocketServices

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 实现 WebSocket 的方法有很多种,可以使用第三方库,也可以自己实现。其中比较常用的第三方库有 OkHttp、Java-WebSocket 等。自己实现的话,可以使用 Java 自带的 WebSocket API,或者使用 Netty 框架等。具体实现方法可以参考相关文档和教程。 ### 回答2: Android实现WebSocket需要通过WebSocket库来实现。常用的库有OkHttp、Java-WebSocket等。 首先,需要在Android项目中导入相应的WebSocket库。可以通过在build.gradle文件中添加依赖来引入库,例如: implementation 'com.squareup.okhttp3:okhttp:版本号' 然后,在代码中创建WebSocket连接。以OkHttp库为例,可以使用OkHttpClient来创建一个WebSocket连接实例,如下所示: OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("WebSocket服务器的URL").build(); WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() { @Override public void onOpen(WebSocket webSocket, Response response) { // 连接成功时的操作 } @Override public void onMessage(WebSocket webSocket, String text) { // 接收到消息时的操作 } @Override public void onClosed(WebSocket webSocket, int code, String reason) { // 连接关闭时的操作 } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { // 连接失败时的操作 } }); 接下来,可以使用webSocket实例来发送消息和关闭连接。例如: webSocket.send("要发送的消息"); webSocket.close(NORMAL_CLOSURE_STATUS, "关闭原因"); 最后,不要忘记在适当的时候关闭WebSocket连接。可以在Activity的生命周期方法中进行关闭操作,例如在onPause()或onDestroy()方法中。 以上就是在Android中实现WebSocket的基本步骤,可以根据实际需求来进行扩展和优化。 ### 回答3: Android 实现 WebSocket 可以通过使用 OkHttp 库来实现。以下是实现 WebSocket 的步骤: 1. 添加 OkHttp 依赖项:首先,在项目的 build.gradle 文件中,添加 OkHttp 的依赖项。你可以在 dependencies 部分中添加以下代码片段: ```groovy implementation 'com.squareup.okhttp3:okhttp:4.9.1' ``` 2. 创建 WebSocket 连接:在你的代码中,创建一个 OkHttpClient 对象,并使用它来创建 WebSocket 连接。你需要实现 WebSocketListener 接口,以便处理 WebSocket 相关的事件。以下是一个示例代码: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("wss://your-websocket-url.com") .build(); WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() { @Override public void onOpen(WebSocket webSocket, Response response) { // 连接成功时的处理逻辑 } @Override public void onMessage(WebSocket webSocket, String text) { // 接收到消息时的处理逻辑 } @Override public void onClosed(WebSocket webSocket, int code, String reason) { // 连接关闭时的处理逻辑 } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { // 连接失败时的处理逻辑 } }); ``` 在上述代码中,你需要将 "wss://your-websocket-url.com" 替换为实际的 WebSocket URL。 3. 发送和接收消息:通过调用 WebSocket 对象的 send 方法来发送消息,通过实现 WebSocketListener 的 onMessage 方法来接收消息。以下是一个示例代码: ```java webSocket.send("Hello, WebSocket!"); // 接收到消息 @Override public void onMessage(WebSocket webSocket, String text) { // 处理接收到的消息 } ``` 在上述代码中,你可以将要发送的内容作为参数传递给 send 方法。 4. 关闭连接:通过调用 WebSocket 对象的 close 方法来关闭 WebSocket 连接。以下是一个示例代码: ```java webSocket.close(NORMAL_CLOSURE_STATUS, "Connection closed"); // 连接关闭时的处理逻辑 @Override public void onClosed(WebSocket webSocket, int code, String reason) { // 处理连接关闭事件 } ``` 在上述代码中,你可以将连接关闭的状态码和原因作为参数传递给 close 方法。 通过以上步骤,你可以在 Android 应用中使用 OkHttp 来实现 WebSocket 功能。请确保在使用完 WebSocket 后及时关闭连接,以免资源浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值