カメラアプリの合間に、Android アプリと AIR2.0 で Socket 通信を試してみました。
Android アプリから送信。AIR2.0 で受信という形を取ります。これは AIR2.0 で受信が出来るようになったので、その練習も兼ねています。
下記を参考にさせて頂きました! 感謝です!! ちなみに Java のことはあんまり良くわかってないです。。
アプリ上の Button を押すと、ソケットを生成して出力ストリームを取得します。そして、"Hello AIR2.0" を送信します。
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Socket socket = new Socket("192.168.x.x", 55555);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello AIR2.0");
if (out != null) out.close();
if (socket != null) socket.close();
} catch (UnknownHostException e) {
android.util.Log.e("UnknownHostException", e.toString());
} catch (IOException e) {
android.util.Log.e("IOException", e.toString());
}
}
});
また、AndroidManifest.xml には下記を追加します。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
パーミッションを忘れずに。
下記を参考にさせて頂きました! 感謝です!!
listenBtn、closeBtn という Sprite のボタンがあると仮定します。
public function Main():void
{
addEventListener(Event.ADDED_TO_STAGE, added);
}
private function added(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, added);
var listenBtn:Sprite = new Sprite();
--中略--
listenBtn.addEventListener(MouseEvent.CLICK, open);
addChild(listenBtn);
var closeBtn:Sprite = new Sprite();
--中略--
closeBtn.addEventListener(MouseEvent.CLICK, close);
addChild(closeBtn);
}
private function open(e:MouseEvent):void
{
try
{
serverSocket = new ServerSocket();
serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT , connected);
serverSocket.bind(55555, "192.168.x.x");
serverSocket.listen();
}catch (e:SecurityError)
{
trace(e);
}
}
private function close(e:MouseEvent):void
{
serverSocket.removeEventListener(ServerSocketConnectEvent.CONNECT , connected);
serverSocket.close();
serverSocket = null;
}
private function connected(e:ServerSocketConnectEvent):void
{
trace("connected");
var socket:Socket = e.socket;
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function socketDataHandler(e:ProgressEvent):void
{
var socket:Socket = e.target as Socket;
socket.removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
// Hello AIR2.0 を受信
trace(socket.readUTFBytes(socket.bytesAvailable));
}
listenBtn をクリックして送信されてくるのを待ちます。
一応、こんな感じで文字列の通信が出来ました!
例えば、Android 端末をコントローラーにして、AIR2.0 をスクリーンに写してみんなでゲームとか出来たら面白いかもです。。
また、AIR for Android も、もうすぐです。AIR と Android でもっと面白いことが出来そうな気がします!!
http://web.dimension-maker.info/cgi-bin/mt/webdimensionmaker/213