Newer
Older
WebSocketClientSample / README.md

WebSocketClientSample

ローカルホストにたてたサーバと通信するサンプルアプリです。

各ファイルのポイント

Build.gradle

okhttp3を使うために下の1行を追加、build gradleしておく。

dependencies {
    //(省略)

    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

AndroidManifest.xml

通信を許可する下の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"); 
    }

}

参考