使用java-webSocket开源库
第一步:添加依赖
//webSocket
implementation "org.java-websocket:Java-WebSocket:1.5.1"
第二步:创建一个绑定服务
要发送消息需要调用WebSocketClient的send方法,它是写在我们的service中,所以需要BindService来实现。
public class WebSocketService extends Service {
private static final String TAG = "WebSocketService";
private static final long HEART_BEAT_RATE = 5 * 1000;//每隔5秒进行一次对长连接的心跳检测
private final HeartHandler mHeartHandler = new HeartHandler(this);
private WebSocketClient client;
private ServiceBinder binder = new ServiceBinder();
private String roomId;
private String userId;
private Messenger mMessenger;
@Nullable
@Override
public IBinder onBind(Intent intent) {
roomId = intent.getStringExtra("roomId");
userId = intent.getStringExtra("userId");
if (mMessenger == null) {
mMessenger = (Messenger)intent.getExtras().get("handler");
}
initSocketClient();
return this.binder;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate: ");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
try {
Log.d(TAG, "onDestroy: socket service onDestroy()");
client.close();
mHeartHandler.removeCallbacksAndMessages(null);
} catch (Exception e) {
e.printStackTrace();
}
}
public final class ServiceBinder extends Binder {
public WebSocketService getService() {
return WebSocketService.this;
}
}
/**
* 初始化webSocket
*/
public void initSocketClient(){
//TODO webSocket地址
String webSocketUrl = "ws://...";
try {
Log.d(TAG, "initSocketClient: roomId---" + roomId);
client = new WebSocketClient(new URI(webSocketUrl + roomId + "/" + userId),new Draft_6455()) {
@Override
public void onWebsocketPong(WebSocket conn, Framedata f) {
super.onWebsocketPong(conn, f);
Log.d(TAG, "onWebsocketPong: " + f.getPayloadData().toString());
Log.d(TAG, "onWebsocketPong: socket ping" + f.getOpcode());
}
@Override
public void onOpen(ServerHandshake handshakedata) {
// 连接打开以后的回调
Log.d(TAG, "onOpen: ");
}
@Override
public void onMessage(String message) {
// 收到消息的回调
Log.d(TAG, "onMessage: socket接收服务器发来的消息:" + message);
Message handlerMessage = Message.obtain();
handlerMessage.what = HandlerMessageWhat.CONNECT_WEB_SOCKET_SUCCESS;
handlerMessage.obj = message;
try {
mMessenger.send(handlerMessage);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public