< 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(); // 再描画要求(繰り返し描画させる)
}
}
}