2010年5月19日水曜日

Android:HelloWorldを作ってみる

Android1.6+
HelloWorldを作ってみる
Windows XP+
Eclipse Galileo
---
この前の記事
Android 開発環境の構築 Android SDKのインストールからXperiaの開発環境構築まで
のつづきです。

さてAndroidの開発環境が整ったところで、まず最初はやはりHelloWorldでしょう。

実際のプログラムを見る前に、Androidのアプリケーションの構成を説明します。

主に個々のアプリケーションを表現する『Activity』クラスと
アプリケーション中のウィンドウを表現する『View』クラスとで
構成されています。
ここでは、このActivityとViewを使ってHelloWorldを作成し、
描画領域を表現する『Canvas』クラスを使いグラフィカルな表示を
試してみます。

Eclipseを起動します。
メニューから
[File]-[New]-[Project]



New Project で
[Android]-[Andoid Project] を選択し[Next]



New Android Projectで
Project name: HelloWorld
◎Create new project in workspace
Build Target [v]Android 1.6 のように選び
Application name: HelloWorld
Package name: com.android.example.helloworld
[v]CreateActivity: HelloWorldActivity

とし

[Finish]をクリックします。

Package nameは本来自分のドメイン名を使用して選定します。
たとえば、所属する会社のドメインがhogehoge.co.jpなら
jp.co.hogehoge.helloworld
とします。
しかしながら、パッケージ名がアプリケーションリリース後に重複しないように
するのが目的なので、それほど厳格には決められていないようです。
しかも、ドメイン名に『 - : ハイフン』が入っている名前は、
Javaパッケージ名では許されないので、ちゃんと選定しようとすると
ずいぶんと頭を悩ませます。





ワークベンチに移動します。
画面右側の矢印をクリックします。
ちなみにこのWelcom画面に戻るには、メニューから[Help]-[Welcome]とします。


ワークベンチの画面が表示されます


ソースコードは次のところに生成されています。
左のパンから

[HelloWorld]-[src]-[com.android.example.helloworld]-[HelloWorldActivity.java]

と開いていきます。

HelloWorldActivity.java

をダブルクリックし開きます。


ちなみに
左のパンに表示されているフォルダは次のような意味があります。

・src
ソースコード
アプリケーションのソースプログラムがここで管理されています。

・res
リソース
アイコンや画像、プログラム中で使用するメッセージ等の文字列。
音楽データや動画データ、ゲームのデータ
と言ったアプリケーションが実行中に使用する実行中に変わらない
データを保存しておきます。

・AndroidManifest.xml
アプリケーションについての情報を記載します。
アプリケーションをリリースするときの情報や
アプリケーションが実行するときに使用する端末の資源、
インターネット接続やファイルシステムへのアクセスや
画面表示の自動回転と言った動作を設定します。

・gen
自動生成されるファイルです。
実際には、作成・編集したリーソース中のラベルを自動生成し、
アプリケーションから利用しやすくしています。
プログラム中で R.layout のように記載されているステートメントは
このリソースを参照しています。


■自動生成されたプログラムをとりあえず実行してみる

メニューから
[Run]-[Run Configurations...]


左側のパンから
[Android Application] をダブルクリック
Project欄の右横の[Browse]をクリックし
ターゲットとなるプロジェクトを選択します。
ここでは
[HelloWorld]
を選択します。




上部のタブから
[Target] を選択し
バーチャルデバイスを選択します。
ここでは

[v]Android1.6_API_Level4

にチェックを入れています

下部のボタン
[Apply]
 をクリックし
[Run]
で実行します。


まつことしばし。。。
2~10分ぐらいでしょうか。
最初の実行時にはバーチャルデバイス用メモリ領域を作成し
そこにAndroid一式をコピーし
エミュレーターを起動し
Androidを実行し
ビルドしたアプリケーションをエミュレーター上の端末にコピーし
アプリケーションの実行を指示します。
重い。。。






とりあえず、

HelloWorld,HelloWorldActivity!

と表示されていますが、これは、プロジェクトの自動生成したときに
自動的にリソース上に作成されたものなので、実際には何もプログラミングしていません。
これではつまらない。。。

ただ、これだけのソースコードでアプリケーションが実行出来るのは、
Windows VisualC++プログラマーからすると驚きですよね。

では、HelloWorld を表示してみましょう。
もともとのプログラムは、次のように生成されているはずです。

[HelloworldActivity.java]

package com.android.example.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}



これを修正していきます。

[HelloworldActivity.java]

package com.android.example.helloworld;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.graphics.*;

public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
HelloWorldView view = new HelloWorldView(getApplication());

setContentView(view);
}
}

class HelloWorldView extends View{
public HelloWorldView(Context context){
super(context);
setFocusable(true);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setARGB(255,128,128,255);
paint.setTextSize(24);

canvas.drawText("Hello World!!!",100,100,paint);

}

}


再び

[Run]-[Run Configuration]

から実行してみます。



のように停止した場合は、
エミュレーター上の Menu ボタンをクリックします。




つづいて、実際にAndroid携帯にこのプログラムを送って実行してみましょう。

Android 開発環境の構築 Android SDKのインストールからXperiaの開発環境構築まで
の下~~~~の方です。。。

まとまってなくてすみません(^-^;;;
いま編集しなおしますので。。。

2010年5月14日金曜日

Android-devices 端末一覧

Android Device 一覧

2009.7.10 HT-03A Android1.5 Docomo 3G 320x480 GPS,Orientation,Accelerometer

2010.4.1 SO-O1B Xperia/X10 Android1.6 Docomo 3G 480x854 GPS,Orientation,Accelerometer

2010.4.27 X06HT HTC Desire Android2.1 SoftBank 480x800 GPS,Orientation,Accelerometer

2010.6 SHI01 ISO1

2010年5月12日水曜日

Android:SurfaceView::onDraw()が呼び出されない

SurfaceView::onDraw()が呼び出されない
Android: SurfaceView::onDraw() is not called
Android1.6+
----

SurfaceViewを使用してみるとOverrideした関数onDrawが呼び出されないことに
気がつきます。これはどうもデフォルトの仕様のようですが、SurfeceViewの
コンストラクタで、setWillNotDraw(false)とすることで
呼び出されるようになります。

class TestView extends SurfaceView
{
public TestView (Context context){
super(context);

setWillNotDraw(false); //■ここに追加
}
protected void onDraw(Canvas canvas) {

canvas.drawBitmap(bitmap,10,10,mPaint);

super.onDraw(canvas);
}
}


.

2010年5月11日火曜日

Android:画面の向きの固定 Portrait Landscape を指定するには How to Fix Screen Orientation

How to Fix screen orientation and rotation
Android1.6
Eclipse GALIREO / WindowsXP
AndroidManifest.xml
screenOrientation,unspecified,portrait,landscape,user,behind,sensor,nosensor
----
Androidの画面の向きの設定

Androidには画面の向きにあわせて自動的に画面を回転する機能がありますが、
アプリケーションによっては固定したいこともあります。
画面を固定するには、AndroidManifest.xml ファイルを編集することで出来ます。

AndroidManifest.xmlファイルを開きます。
Open AndroidManifest.xms



①下のタブの中から[Application]を選びます。
Select "Application" tab

②Application Nodesから(Activity)を選択します。ここでは、[.TestGravityActivity(Activity)]となっているところです。
Select Activity from "Application Nodes"

③画面右下から[Screen orientation]を選択します。
Select "Screen orientation"

 unspicified : システム自動設定 ユーザーの画面の向けた方向に自動回転します。/ Auto rotation
 landscape : 横長方向固定 / Fix landscape
 portrait : 縦長方向固定 / Fix portrait
 user : 現在のレイアウトに従います ユーザーの操作により切り替わります
 behind : 親のアクティビティーに従います ユーザーの操作により切り替わります
 sensor : センサーに従います
 nosensor : センサーを無視します

.

2010年5月10日月曜日

Activity・Viewクラスでのスクリーンサイズ・画面サイズの取得方法

Android 1.6
How to get the screen size on Activity class.
How to get the screen size on View class.
Activityクラスの派生クラスでのスクリーンサイズ・画面サイズの取得方法
Viewクラスの派生クラスでのスクリーンサイズ・画面サイズの取得方法
----

■Activityクラス上でスクリーンサイズを取得する方法

getSystemService(WINDOW_SERVICE)
を使用してスクリーンサイズを取得します。


import android.content.Context;
import android.view.Display;
import android.view.WindowManager;

public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = windowmanager.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();
}
}


■Viewクラス上でスクリーンサイズを取得する方法

contextオブジェクトが使えるのでそれを使用します。

Display disp =
((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).
getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();

2010年5月4日火曜日

Android Xperia/X10 adb devices で認識されない 表示されない

adb can't list my attached device
SonyEricsson Xperia X10 SO-01B
android usb driver download and install
Windows XP,Windows Vista,Windows 7
Eclipse GALILEO
adb version 1.0.25
adb devices,adb list,adb kill-server,adb start-server
について記載しています
---
■症状:simptom
adb devices でSonyEricsson Xperia SO-01B が認識しない。
android/xperia USB 接続できない認識しない。
マスストレージデバイスとしてしか認識されない。
Xperiaのドライバのダウンロード場所が見つからない!?

■確認
現状では次のようにコマンドを入力しても、認識されていない状態だと思われます。

C:\>adb devices
List of devices attached


Xperia が認識されていません。

結局 / We need ...

1.XperiaをUSB Debug Mode にしないといけない。
We have to change Xperia to Debug Mode.

2.USBドライバが足りない。
USBドライバはExperia上にすでに保存されています。
We have to install USB Driver for Debug Mode.
(Driver is included on Xperia,We don't need download)

のが原因です。


■USBドライバの取り出しとインストール
USBドライバは、Xperiaの中に予め入っています。
XperiaをUSBモードで接続し、中のドライバを展開インストールします。

ドライバの場所は
Xperia's debug connection driver is here
(Xperia):\CDBrowser\Drivers.zip\ADB\amd64
(Xperia):\CDBrowser\Drivers.zip\ADB\i386
(Xperia):\CDBrowser\Drivers.zip\ADB\android_winusb.inf

パソコンにコピーし適当なフォルダに展開します。
android_winusb.infを右クリックしインストールします。
Right click on android_winusb.inf and select install.

■Xperiaをデバッグモードへ変更する
 Change mode on Xperia to Debug Mode

Xperia > 設定 > アプリケーション > 開発 > USBデバッグ [v]
Xperia X10 > Settings > Applications > Development > USB Debugging [v]




デバッグモードに変更することでドライバーがインストールされます。
And then,Automaticaly installed.



>adb kill-server
>adb start-server
>adb devices
List of devices attached
CB511***M decvice




できましたでしょうか。
.

Android-KeyEvent-KeyCode-List

Android(Java)で使われるキーコードの一覧表
onKeyDown,onKeyUpで通知される番号とその意味です。


CODE CODE(Hex) KEYCODE
0 0x0000 KEYCODE_UNKNOWN
1 0x0001 KEYCODE_SOFT_LEFT
2 0x0002 KEYCODE_SOFT_RIGHT
3 0x0003 KEYCODE_HOME
4 0x0004 KEYCODE_BACK
5 0x0005 KEYCODE_CALL
6 0x0006 KEYCODE_ENDCALL
7 0x0007 KEYCODE_0
8 0x0008 KEYCODE_1
9 0x0009 KEYCODE_2
10 0x000A KEYCODE_3
11 0x000B KEYCODE_4
12 0x000C KEYCODE_5
13 0x000D KEYCODE_6
14 0x000E KEYCODE_7
15 0x000F KEYCODE_8
16 0x0010 KEYCODE_9
17 0x0011 KEYCODE_STAR
18 0x0012 KEYCODE_POUND
19 0x0013 KEYCODE_DPAD_UP
20 0x0014 KEYCODE_DPAD_DOWN
21 0x0015 KEYCODE_DPAD_LEFT
22 0x0016 KEYCODE_DPAD_RIGHT
23 0x0017 KEYCODE_DPAD_CENTER
24 0x0018 KEYCODE_VOLUME_UP
25 0x0019 KEYCODE_VOLUME_DOWN
26 0x001A KEYCODE_POWER
27 0x001B KEYCODE_CAMERA
28 0x001C KEYCODE_CLEAR
29 0x001D KEYCODE_A
30 0x001E KEYCODE_B
31 0x001F KEYCODE_C
32 0x0020 KEYCODE_D
33 0x0021 KEYCODE_E
34 0x0022 KEYCODE_F
35 0x0023 KEYCODE_G
36 0x0024 KEYCODE_H
37 0x0025 KEYCODE_I
38 0x0026 KEYCODE_J
39 0x0027 KEYCODE_K
40 0x0028 KEYCODE_L
41 0x0029 KEYCODE_M
42 0x002A KEYCODE_N
43 0x002B KEYCODE_O
44 0x002C KEYCODE_P
45 0x002D KEYCODE_Q
46 0x002E KEYCODE_R
47 0x002F KEYCODE_S
48 0x0030 KEYCODE_T
49 0x0031 KEYCODE_U
50 0x0032 KEYCODE_V
51 0x0033 KEYCODE_W
52 0x0034 KEYCODE_X
53 0x0035 KEYCODE_Y
54 0x0036 KEYCODE_Z
55 0x0037 KEYCODE_COMMA
56 0x0038 KEYCODE_PERIOD
57 0x0039 KEYCODE_ALT_LEFT
58 0x003A KEYCODE_ALT_RIGHT
59 0x003B KEYCODE_SHIFT_LEFT
60 0x003C KEYCODE_SHIFT_RIGHT
61 0x003D KEYCODE_TAB
62 0x003E KEYCODE_SPACE
63 0x003F KEYCODE_SYM
64 0x0040 KEYCODE_EXPLORER
65 0x0041 KEYCODE_ENVELOPE
66 0x0042 KEYCODE_ENTER
67 0x0043 KEYCODE_DEL
68 0x0044 KEYCODE_GRAVE
69 0x0045 KEYCODE_MINUS
70 0x0046 KEYCODE_EQUALS
71 0x0047 KEYCODE_LEFT_BRACKET
72 0x0048 KEYCODE_RIGHT_BRACKET
73 0x0049 KEYCODE_BACKSLASH
74 0x004A KEYCODE_SEMICOLON
75 0x004B KEYCODE_APOSTROPHE
76 0x004C KEYCODE_SLASH
77 0x004D KEYCODE_AT
78 0x004E KEYCODE_NUM
79 0x004F KEYCODE_HEADSETHOOK
80 0x0050 KEYCODE_FOCUS
81 0x0051 KEYCODE_PLUS
82 0x0052 KEYCODE_MENU
83 0x0053 KEYCODE_NOTIFICATION
84 0x0054 KEYCODE_SEARCH
85 0x0055 KEYCODE_MEDIA_PLAY_PAUSE
86 0x0056 KEYCODE_MEDIA_STOP
87 0x0057 KEYCODE_MEDIA_NEXT
88 0x0058 KEYCODE_MEDIA_PREVIOUS
89 0x0059 KEYCODE_MEDIA_REWIND
90 0x005A KEYCODE_MEDIA_FAST_FORWARD
91 0x005B KEYCODE_MUTE

Android:RoboDefence ゲーム攻略方法 -strategy- 

Xperiaを購入してマーケットからゲームを見てみると、なにやら評価が非常に良く
ダウンロード数が膨大なゲームを発見。
RoboDefence
フリー版が存在するのも知らずに有料版をちょっと評価のつもりで購入したところ
これが、評価どころか、どっぷりはまってしまった。

ゲームの内容は、

ゲーム画面上の左から敵があらわれ、右に行軍し、画面端に到達するとライフが減る。
その行軍を邪魔するように砲台を設置し敵の軍を駆逐、殲滅する。

これだけなのに、敵の波状攻撃と、砲台の設置の方法や航空部隊への対処で
いろいろな戦略が取れる。
難易度の設定がとてもよく考えられているので、適度なストレスと爽快感があり
さらにハマリ度をアップさせています。

で。。。。

自分なりの攻略方法を見つけたので掲載してみます。

この方法でLevel60までは、サクサクレベルアップできます。

■RoboDefenceゲーム開始



G:砲台 この砲台を中心に設置していきます。
S:スロー 途中に配置していきます。敵軍に常にスローがかかるように配置していきます。
M:ミサイル 航空部隊撃墜用に後ろの方に設置していきます。
A:対空砲 航空部隊撃墜用。これも後ろの方に先に設置し、前から最高レベルにレベルアップさせていきます。

■RoboDefence序盤戦



なるべく早い段階で、下段の砲台を配備します。
太字のMは、レベルアップしたミサイルです。
ミサイルの配備は、上下段両方に攻撃出来る位置に配備します。

左側の敵の出口最初の砲台はレベルアップさせません。
固い装甲ロボットや戦車の大群が出現したときに、この砲台を外すことで
逆戻りしてくるので、設置と取り外しを何度か繰り返すことで敵を殲滅できます。


■RoboDefence中盤戦


上段の対空用ミサイルを配備していきます。


■RoboDefence終盤戦


下段に対空用ミサイルを配備していきます。

Level60までは到達できたのですが、いかんせん左の砲台の取り外しで部隊を逆走させる
方法だと、部隊がだんだん長くなってくるこのレベルだと、
砲台が外せず破壊し尽くせなくなりました。
最も、対空砲を設置しすぎたのも問題で、対戦車用のミサイルの配備をしっかりすれば
まだまだ戦えそうです。
Level60では、対空砲は22基でも大丈夫そうです。