もともとHT-03aは、今発売されているAndroidと比べて性能が低い。
しかもカスタムログを入れてOSを2.2に上げているので、動きが更に遅い。
これで開発中のアプリをインストールしようとすると、ログに「Failed to install Hoge.apk on device 'fuga':timeout」と表示されてしまう。
「Failed to install Hoge.apk on device ’1000cc770082′: タイムアウト 対策」により、「ウィンドウ」→「設定」→「Android」→「DDMS」→「ADB 接続タイム・アウト(ミリ秒)」を大きな値(30,000)に設定した。それでPCからデバイスに転送が完了した。
2011年6月5日日曜日
2011年6月4日土曜日
Androidでドライブレコーダー 5日目
1画面で複数Viewを表示する方法
画面にViewを設定するには、ActivityのonCreate()でViewオブジェクトを生成して、setContentView(View)でそのビューを指定する。
単一のViewの場合には、それでいいのだが、複数Viewを1画面で表示させたい場合に対応できない。
AndroidでGUIに、その場合の対応方法が書かれている。キーワードは、ViewGroupである。ViewGroupのサブクラスである各種Layout関連クラスから最適なクラスをsetContentView(View)で、設定する。そして、そのLayout関連クラスに複数のViewを追加すればよい。
初期画面はGoogleMapを表示する。
GoogleMapを使用するためには、Android Map API Keyを取得する必要がある。取得方法は「地図/位置情報/GPSを使うAndroidアプリを作るには」にあったので、参考にした。ただし、keytoolで証明書のfingerprintを取得するのだが、適当なパスワードを入力しても「keystore was tampered with or password was incorrect android」と表示されてfingerprintが取得できない。改竄されているかパスワードが正しくないということのようだ。Android SDKをインストールしたときにパスワードを設定した記憶がないので、パスワードを入れずに改行をしたら取得できた。
MapAPIのkeyを手に入れて、開発に着手する。MapViewを作成してプログラムを実行したところ、「Error inflating class MapView」というエラーが発生した。ActivityはMapActivityにしないといけなかったことを思い出し、そのようにして実行したところ、世界地図が表示された。何も実装していないので、表示されるだけ。でも第一歩を踏み出した。
画面にViewを設定するには、ActivityのonCreate()でViewオブジェクトを生成して、setContentView(View)でそのビューを指定する。
単一のViewの場合には、それでいいのだが、複数Viewを1画面で表示させたい場合に対応できない。
AndroidでGUIに、その場合の対応方法が書かれている。キーワードは、ViewGroupである。ViewGroupのサブクラスである各種Layout関連クラスから最適なクラスをsetContentView(View)で、設定する。そして、そのLayout関連クラスに複数のViewを追加すればよい。
public void onCreate(Bundle savedInstanceState) {
LinearLayout layout = new LinearLayout();
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
CameraPreview cameraPreview = new CameraPreview(this);
layout.addView(cameraPreview);
MapView mapView = new MapView(this);
layout.addView(mapView);
}
それでは、まず初期画面を表示するところから始めよう。初期画面はGoogleMapを表示する。
GoogleMapを使用するためには、Android Map API Keyを取得する必要がある。取得方法は「地図/位置情報/GPSを使うAndroidアプリを作るには」にあったので、参考にした。ただし、keytoolで証明書のfingerprintを取得するのだが、適当なパスワードを入力しても「keystore was tampered with or password was incorrect android」と表示されてfingerprintが取得できない。改竄されているかパスワードが正しくないということのようだ。Android SDKをインストールしたときにパスワードを設定した記憶がないので、パスワードを入れずに改行をしたら取得できた。
MapAPIのkeyを手に入れて、開発に着手する。MapViewを作成してプログラムを実行したところ、「Error inflating class MapView」というエラーが発生した。ActivityはMapActivityにしないといけなかったことを思い出し、そのようにして実行したところ、世界地図が表示された。何も実装していないので、表示されるだけ。でも第一歩を踏み出した。
2011年6月2日木曜日
Androidでドライブレコーダー 4日目
実機でデバッグをするために、実機に開発中(まだ空っぽ)のアプリをインストールした。参考にしたサイトは以下のとおり。
「実機でデバッグするには」の2-2で記述している、adbコマンドが最新のバージョン(2011/06/02)ではディレクトリが変わっている。Android\android-sdk\toolsとなっているが、インストーラでインストールすると、C:\Program Files\Android\android-sdk\platform-toolsにインストールされる。
adb devicesとすると、HT********** offline と表示されたので、一度USBを抜いて再度差してからadb devicesすると、HT******** deviceと表示された。
「XPERIAに自分で作ったAndroidアプリをインストールする方法 / XPERIAでのデバッグ方法」の通りにEclipse(ADT)を使用して実機にアプリをインストール出来ることを確認した。
2011年6月1日水曜日
Androidでドライブレコーダー 3日目
昨日疑問だったCanvasのsave(), restore()だが、「SurfaceViewならAndroidで高速描画ゲームが作れる」のサンプルのsave()とrestore()をコメントにしても動作は変わらないように見えた。
状態って何?
状態って何?
void doDraw() {
Canvas canvas = getHolder().lockCanvas();
// canvas.save(); // ★ここで状態を保存
canvas.rotate(45.0f);
Paint paint = new Paint();
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setTextSize(24);
canvas.drawText("Hello, SurfaceView!", paint.getTextSize(), 0, paint);
// canvas.restore(); // ★ここで状態を復元
getHolder().unlockCanvasAndPost(canvas);
}
2011年5月31日火曜日
Androidでドライブレコーダー 2日目
片手まで、勉強しぃしぃやるので、完成までに非常に時間がかかるだろう。完成するかな?
昨日に引き続き、「SurfaceViewならAndroidで高速描画ゲームが作れる」でSurfaceViewについて、勉強中。
SurfaceViewのgetHolder()によりSurfaceHolderを取得することができるが、このSurfaceHolderって何?多分Canvasを保持するものだと思うんだけど、それってSurfaceViewがCanvasを保持すればいいんじゃないのかなぁ。SurfaceHolderが保持する理由がわからない。凝集性を高めるため?
SurfaceHolderは、lockCanvas()でCanvasを取得し、そのCanvasに描画をする。最後にSurfaceHolderのunlockCanvasAndPost(Canvas)で描画を完了する。描画処理のためのプレースホルダーとして、SurfaceHolderのコールバックがあるようだ。
SurfaceView関係のクラスとメソッドの一覧を見ると、やはり描画処理に関してはSurfaceHolderがコールバックで行うということで、ビュー自体と描画処理自体を分けてるってことかな?
あと、Canvasのsave()とrestore()がわからない。Canvas#save()は呼び出された状態を内部スタックに保存するとある。Canvas#restore()でスタックに保存した状態を復元するということである。
このようなサンプルだとsave()とrestore()を使用すると、「Canvasのsave()とrestore()の応用」のように画像を斜めに表示することができるとなっているが、この、save()とrestore()を書かないと斜めにならないのだろうか?
昨日に引き続き、「SurfaceViewならAndroidで高速描画ゲームが作れる」でSurfaceViewについて、勉強中。
SurfaceViewのgetHolder()によりSurfaceHolderを取得することができるが、このSurfaceHolderって何?多分Canvasを保持するものだと思うんだけど、それってSurfaceViewがCanvasを保持すればいいんじゃないのかなぁ。SurfaceHolderが保持する理由がわからない。凝集性を高めるため?
SurfaceHolderは、lockCanvas()でCanvasを取得し、そのCanvasに描画をする。最後にSurfaceHolderのunlockCanvasAndPost(Canvas)で描画を完了する。描画処理のためのプレースホルダーとして、SurfaceHolderのコールバックがあるようだ。
SurfaceView関係のクラスとメソッドの一覧を見ると、やはり描画処理に関してはSurfaceHolderがコールバックで行うということで、ビュー自体と描画処理自体を分けてるってことかな?
あと、Canvasのsave()とrestore()がわからない。Canvas#save()は呼び出された状態を内部スタックに保存するとある。Canvas#restore()でスタックに保存した状態を復元するということである。
void doDraw() {
Canvas canvas = getHolder().lockCanvas();
canvas.save(); // ★ここで状態を保存
canvas.rotate(45.0f);
Paint paint = new Paint();
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setTextSize(24);
canvas.drawText("Hello, SurfaceView!", paint.getTextSize(), 0, paint);
canvas.restore(); // ★ここで状態を復元
getHolder().unlockCanvasAndPost(canvas);
}SurfaceViewならAndroidで高速描画ゲームが作れるより図を引用。
このようなサンプルだとsave()とrestore()を使用すると、「Canvasのsave()とrestore()の応用」のように画像を斜めに表示することができるとなっているが、この、save()とrestore()を書かないと斜めにならないのだろうか?
2011年5月30日月曜日
Androidでドライブレコーダー 1日目
SmartPhoneのAndroidによるドライブレコーダーをつくろうと思う。
別に高機能で高性能なドライブレコーダーではなく、ドライブに行ったときにその軌跡や風景を録画して保存することが目的。したがって、事故捜査で証拠として使用することができるようなシロモノは、端から考えていない。
Androidの可能性を日々考えているが、実際にどのようにして実現できるかがわからなければ、案も浮かんでこないかもしれない。
なので、ちょっとずつ理解を進めていって、ドライブレコーダーを実現していこうと思う。
開発において、@ITの「Androidで動く携帯Javaアプリ作成入門」という連載を参考にする。連載はじめの頃はまだSDKも1.0だったようだけど、基本的なことは変わっていないから今でも十分に参考になると思う。
まずは「もはやケータイに必須のカメラをAndroidで制御しよう」を参考にしてカメラを起動して、プレビュー画面を表示することから始めよう。
プレビュー画面はSurfaceViewでつくるようだが、これは「SurfaceViewならAndroidで高速描画ゲームが作れる」によると、ダブルバッファリングを装備したビューのようだ。それにより描画でちらつきがなくなる。
別に高機能で高性能なドライブレコーダーではなく、ドライブに行ったときにその軌跡や風景を録画して保存することが目的。したがって、事故捜査で証拠として使用することができるようなシロモノは、端から考えていない。
Androidの可能性を日々考えているが、実際にどのようにして実現できるかがわからなければ、案も浮かんでこないかもしれない。
なので、ちょっとずつ理解を進めていって、ドライブレコーダーを実現していこうと思う。
開発において、@ITの「Androidで動く携帯Javaアプリ作成入門」という連載を参考にする。連載はじめの頃はまだSDKも1.0だったようだけど、基本的なことは変わっていないから今でも十分に参考になると思う。
まずは「もはやケータイに必須のカメラをAndroidで制御しよう」を参考にしてカメラを起動して、プレビュー画面を表示することから始めよう。
プレビュー画面はSurfaceViewでつくるようだが、これは「SurfaceViewならAndroidで高速描画ゲームが作れる」によると、ダブルバッファリングを装備したビューのようだ。それにより描画でちらつきがなくなる。
登録:
投稿 (Atom)