okhttp3を使うために下の1行を追加、build gradleしておく。
dependencies { //(省略) implementation 'com.squareup.okhttp3:okhttp:4.9.1' }
通信を許可する下の2行を追記。 WebSocket関係なく、通信の際には必要なコード。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
以下の android:usesCleartextTraffic="true" を追記。 これもWebSocket関係なく、通信の際には必要なコード。
<application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" <!--(省略)--> android:usesCleartextTraffic="true" <!--(省略)--> tools:targetApi="31">
メッセージ送ったり、受け取ったりするサンプルコード。
class WebSocketClient extends WebSocketListener { private WebSocket webSocket; // コンストラクタ public WebSocketClient() { OkHttpClient client = new OkHttpClient(); // 接続先のエンドポイント // エミュレータから実行するために、ここではlocalhostとか127.0.0.1ではないことに注意 Request.Builder request = new Request.Builder(); request.url("ws://10.0.2.2:8080/demo/WebSocketDemo"); webSocket = client.newWebSocket(request.build(), this); } public void send(String message) { System.out.println("send message/ "+message); webSocket.send(message); } @Override public void onOpen(WebSocket webSocket, Response response) { // WebSocketと接続できたら呼ばれる System.out.println("WebSocket opened successfully"); } @Override public void onMessage(WebSocket webSocket, String text) { // メッセージきたら呼ばれる System.out.println("Received text message/ " + text); } @Override public void onMessage(WebSocket webSocket, ByteString bytes) { // メッセージきたら呼ばれる System.out.println("Received binary message/ " + bytes.hex()); } @Override public void onClosing(WebSocket webSocket, int code, String reason) { // WebSocketが終了したら呼ばれる webSocket.close(1000, null); System.out.println("Connection closed end/ " + code + reason); } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { // WebSocketの接続に失敗したら呼ばれる System.out.println("Connection failed/ " + t.getLocalizedMessage()); } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // 省略 // さっき作ったやつをインスタンス化してこんな感じで送信できる。 WebSocketClient webSocketClient = new WebSocketClient(); webSocketClient.send("Hello from Android"); } }