article

Android と AIR2.0 と Socket

  • 2010年7月 2日

カメラアプリの合間に、Android アプリと AIR2.0 で Socket 通信を試してみました。

Android アプリから送信。AIR2.0 で受信という形を取ります。これは AIR2.0 で受信が出来るようになったので、その練習も兼ねています。

Android アプリ

下記を参考にさせて頂きました! 感謝です!! ちなみに 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>

パーミッションを忘れずに。

AIR2.0

下記を参考にさせて頂きました! 感謝です!!

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

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

 

画像の中に見える文字を入力してください。