# 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"); } } ``` ## 参考 - [AndroidでWebSocket - slideshare](https://www.slideshare.net/kadoppe/androidwebsocket) - [OkHttp(基本的なGET・POST)- Qiita](https://qiita.com/naoi/items/8d493f00b0bbbf8a666c) - [AndroidでWebSocket通信 - Zenn](https://zenn.dev/cizneeh/articles/websocket-on-android)