ブラウザの[戻る]を押してね!






< Android 版 インターネット通信機能デモプログラム(1) >

/*
  インターネット上のサーバから「顔表情コード」を読み出して表示する
*/

package test.HttpTest1;

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.view.View;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.Color;
import android.graphics.Rect;
import android.content.res.Resources;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpTest1 extends Activity {
  FaceView faceView = null; // View オブジェクト
  int iFace = 99; // 顔表情コード(最初は表示しない)

  final static long waittime = 2000; // sleep時間
  final static String urlName = "http://www3.biwako.ne.jp/~mirai954/cmd.txt"; // 接続先のファイル名

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    faceView = new FaceView( this );
    setContentView(faceView);

    //スレッドの生成、開始
    MyThread th1 = new MyThread("th1");
    th1.start();
  }

  class MyThread extends Thread {
    // コンストラクタ
    public MyThread(String name) {
      super(name);
    }

    // スレッド本体
    public void run() {
      URL url = null;
      String sLine = "";

      while ( true ) {
        try {
          url = new URL(urlName);
        } catch (MalformedURLException e) {
        }

        if (url != null) {
          try {
            HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
            BufferedReader bin = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));

            // 内容が null 以外なら読み出す
            while ((sLine = bin.readLine()) != null) {
              switch(sLine.charAt(0)) {
              case '0': // 泣く
                iFace = 0;
                break;
              case '1': // 笑う
                iFace = 1;
                break;
              case '2': // 怒る
                iFace = 2;
                break;
              case '3': // 普通
                iFace = 3;
                break;
              default: // 上記以外は何もしない
                break;
              }
            }
            bin.close(); // ファイル読み出し終了
            urlCon.disconnect(); // 接続終了
          } catch (IOException e) {
          }
        } else {
        }

        try {
          // 一定時間待つ
          Thread.sleep( waittime );
        } catch (InterruptedException ex) {
        }
      }
    }
  }

  class FaceView extends View {
    BitmapDrawable face0, face1, face2, face3; // 画像のオブジェクト

    // コンストラクタ
    public FaceView(Context context) {
      super(context);

      // 描画のための画像の準備と背景の初期化
      setBackgroundColor(Color.WHITE);
      Resources rs = context.getResources();
      face0 = (BitmapDrawable)rs.getDrawable(R.drawable.mark857);
      face1 = (BitmapDrawable)rs.getDrawable(R.drawable.mark856);
      face2 = (BitmapDrawable)rs.getDrawable(R.drawable.mark854);
      face3 = (BitmapDrawable)rs.getDrawable(R.drawable.mark855);
      Rect rect = new Rect(0, 0, face0.getIntrinsicWidth(), face0.getIntrinsicHeight());
      face0.setBounds( rect );
      face1.setBounds( rect );
      face2.setBounds( rect );
      face3.setBounds( rect );
    }

    // 顔の表情の描画処理
    protected void onDraw(Canvas canvas ) {
      super.onDraw(canvas);
      switch(iFace) {
      case 0: // 泣く
        face0.draw(canvas);
        break;
      case 1: // 笑う
        face1.draw(canvas);
        break;
      case 2: // 怒る
        face2.draw(canvas);
        break;
      case 3: // 普通
        face3.draw(canvas);
        break;
      default: // 上記以外は何もしない
        break;
      }
      invalidate(); // 再描画要求(繰り返し描画させる)
    }
  }
}