最新の記事アプリケーションアクティビティ、インテント、サービスについてデバイスAndroidでのデバイス制御について。地磁気センサ、加速度センサなどマルチメディアグラフィックス、音楽や動画再生などマルチメディア処理についてユーザインターフェースAndroidのユーザインターフェイスについて、またユーザインターフェイスを提供するコンポーネントの話題について。リソースAndroidでのアイコン、画像、文字列、ローカライゼーションなどHacksマッシュアップ開発環境Androidの開発環境など。他アプリケーションとの通信を行う際には、IntentやServiceなどを利用したデータの受け渡しを行う事が多いでしょう。本エントリでは、Unixドメインのソケット通信を利用して他アプリケーションと通信する方法を紹介したいと思います。Unixドメインのソケット通信とは、通常インターネットで利用しているソケット通信(INETドメインソケット通信)とは異なり、ネットワークを介さず、端末内の別プロセスとソケット通信を行います。INETドメインのソケット通信の記事はこちらになります。Socketクラスを用いてソケット通信をするServerSocketを使用してクライアントからデータを受信をする本エントリでは、Server側、Client側共にJavaで作成していますが、もちろんNDKを利用したC/C++ライブラリとの通信も可能です。Unixドメインソケットを利用する為に利用するクラス一覧は以下の表の通りです。/]本エントリで作成するもの本エントリでは2アプリケーション間のプロセス間通信を行う為、Server/Clientの二つのアプリケーションを例に挙げ解説しています。2アプリケーションの構成は以下図の通りになります。2つのアプリケーションは、以下のような起動順で立ち上げられ通信を確立しています。以降、Server側、Client側の順に取り扱っていきます。それでは続きをどうぞ。Serverを作成するまず、Server側のソケットを作成します。Server側の待ち受けソケットを開く為には、LocalServerSocketクラスのacceptメソッドを利用します。Unixドメインソケットを利用する場合も、UIスレッド上で通信を行わないほうがいいでしょう。サンプルでは、Threadを起動し、Thread中でLocalServerSocketクラスのacceptメソッドを呼び出し、Clientからのconnect要求を待ち受けています。受信処理自体は簡略化していますが、通常のソケット通信のようにRead/WriteのStreamを取得し様々なデータの送受信を行う事ができます。blocke.printStackTrace();}}1行目の通り、Runnableインターフェースをimplementsし、runメソッドにソケット通信関連の処理を記述しています。11行目からのonResumeメソッド内部でLocalServerSocketクラスのインスタンスを作成し、Threadの起動を行っています。16行目で、LocalServerSocketを作成しています。LocalServerSocketの作成時には、ソケット名を指定する必要があります。37行目のacceptメソッドの実行で、LocalServerSocketを開き、Clientからの要求を待ち受けています。acceptメソッドを実行すると、Unixドメインソケットが開かれます。開かれているUnixドメインソケットを確認するには、ADB接続下で下記コマンドを利用します。上記コマンドの実行結果は以下図の通りです。6行目で指定しているSOCKET_NAMEのソケットが開かれていることが確認できます。37行目以降で、ソケット接続後の受信処理とソケットのクローズ処理を行っています。これらの処理は、INETドメインソケットを利用した場合と変わらないため割愛します。Clientを作成する作成したServerに接続(Connect)を行い、ソケットへ書き込みを行うClientを作成します。Client側のConnectメソッドには、LocalSocketクラスに対しServer側で指定したソケット名を、LocalSocketAddressクラス経由で引き渡します。サンプルでは、接続の契機をボタン押下時として、onClickメソッド呼び出し時にThreadを起動し、Thread内でLocalSocketクラスのconnectメソッドを呼び出しています。接続後には、適当なint型の数値3つを順に書き込みます。Toast.LENGTH_LONG);break;default:break;}}}13行目で、接続先のソケットを指定しています。接続先ソケットの指定には、LocalSocketAddressクラスを利用し、コンストラクタにServer側で指定したソケット名を引き渡します。15行目のconnectメソッドを呼び出した後、ソケット通信が確立します。通常のINETドメインソケット通信と同様に、LocalSocketクラスのgetOutputStreamメソッドからストリームを取得し、書き込みを行っています。30行目の通り、通信処理の終了時には必ずソケットを閉じるようにしましょう。上記のServerとClientアプリを作成し、LocalSocketでの接続/通信を行った結果は以下の通りになります。Server側のアプリケーションで、Client側で書き込んだ数字が読み取れていることが確認できています。関する議論の土台となる本を」という著者陣の熱い思いから、ついにAndroidアプリ設計の決定版が登場!AndroidモダンプログラミングはKotlin&Gradleを特集した解説書です。Keynoteまとめ:現実にも検索を。TechBooster.TechBoosterについて。