Android/techfirm_android

Last-modified: 2010-10-15 (金) 15:17:56

ハードウェア依存のもの

 GSM電話、Bluetooth、EDGE、3G、WiFi、カメラ、GPS、コンパス、
 加速度計はハードウェア依存

Androidのメディア対応形式

 一般的なオーディオ、ビデオ、および静止画像フォーマットをサポート
 (MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF)

アニメーションGIFについて

 Androidで画像を表示するときはImageViewを使うが、
 ImageViewでGIFアニメーションを表示しようとしても、
 最初の1コマ目が表示されるだけで、2コマ目以降表示されない
 http://d.hatena.ne.jp/tomorrowkey/20100419/1271678022

 アニメーションGIF表示の方法としては、3通りあって、
 1WebViewを使う方法   ⇒ブラウザでHTMLのタグでimgを指定するだけ
 2android.graphics.Movieクラスを使う方法
 3自作クラスを使う方法 ⇒GIFをバイナリで読み込んでBitmapにし、連続表示

 WebViewを使うと、一部のアニメーションGIFは動かないようだ。
 http://d.hatena.ne.jp/tomorrowkey/20100422/1271934492
  http://homepage2.nifty.com/takaaki024/tips/programs/java/android.html

 MovieクラスはSDK純正のクラスだが、一部、バグがあるらしい。
 Movieクラスを使った場合、GIF画像にoffsetの値が設定してあると動かない。
 (具体的にはImage BlockのImage Left PositionとImage Top Positionが
  設定されているもの)

 自作クラスを使うと、Movieクラスを使うより重くなってしまう。
 http://d.hatena.ne.jp/tomorrowkey/files/gif.pdf

 以下のサイトに具体的なAndroidのコードあり
 http://d.hatena.ne.jp/tomorrowkey/20100422/1271934492
 
http://www.google.co.jp/codesearch/p?hl=ja#cDrQXjL3ocQ/trunk/Explorer/src/jude/android/explorer/view/GifView.java&d=0

アンドロイドの画面遷移

 http://www.techfirm.co.jp/lab/android/transition.html

 インテントを通常通り2つ作っておいて(xml記述か、プログラムで作成)、
 下記のAPIで遷移

 @Override
 Intent intent = new Intent();
 intent.setClassName(
"android.sample", //パッケージ名
"android.sample.NextActivity"); //クラス名
 startActivity(intent);

Androidの終了コード

 Androidは終了コードを埋め込んでよいようだ。
 finish();
 でActivityを終了できる。

 ただし、
 startActivityしたのと同じ回数だけfinish()を実行しなければ
 アプリは終了しないようだ。

 finishはActivityをスタックから取り除くだけ

 startActivityすると同じActivityがどんどん作られてしまうので、
 finishしてからstartActivityするとよい。

Activityのスタック

 Activityはスタックに積まれており、
 戻るボタンで戻ることができる。
 また、戻るボタンを押したときに、スタックから取り除かれる。
 
 ホームボタンを押下すると、待ち受け画面に戻るが、
 スタックはそのまま積まれたままになっている。

リソースをプロジェクトに登録したときは、

 プロジェクトにフォーカスを当てて、右クリックメニューから
 「リフレッシュ」を選択したほうがいい
 ちなみに、「自動的にビルド」がチェックされている状態ならば、
 リフレッシュを行った後に自動的にビルドされる。

Viewクラスを継承すると、独自クラスもsetContentViewで追加することが可能

 private class SampleView extends View { ...
 のようにViewクラスを継承すると任意のクラスをビューとして追加可能

Viewに対するタッチイベントを扱うときは以下のメソッドをオーバーライド

@Override
public boolean onTouchEvent(MotionEvent event) { ...
if(event.getAction() == MotionEvent.ACTION_DOWN){ ...

 スライドは、MotionEvent.ACTION_MOVE
 離すは、MotionEvent.ACTION_UPで同様に取得可能

 タッチしたポジションは、event.getX();とevent.getY();で取得可能

Viewの表示内容は、onDrawメソッド内に記述

 protected void onDraw(Canvas canvas) {

 再描画の指示は、invalidate();で、onDrawメソッドが呼ばれる。
 (従来のrepaintに相当するもの)

画像のアニメーションは、SurfaceViewを使う(ウェジットとの違いも載っている)

 http://www.atmarkit.co.jp/fjava/rensai4/android12/android12_1.html
 
 Viewクラスでinvalidate()でアニメーションする方法もあるが、重いらしい

 関連>スレッドを使って描画を試みて失敗した例とその改善策など
 http://android.g.hatena.ne.jp/n4_t/20090624
 http://android.g.hatena.ne.jp/n4_t/20090709/1247156126

羅針盤アプリのランドマーク機能と星空機能は他アプリからの起動が可能。

 (Intentで起動する)
 http://www.techfirm.co.jp/lab/android/starrysky.html

 ※羅針盤アプリは、HT-03Aにプリインストールされているアプリ
 http://www.youtube.com/watch?v=rzgXw-C8YOU&feature=related
 http://www.youtube.com/watch?v=OBO1LKUhqXc&feature=related
 http://www.youtube.com/watch?v=wYvVkkk77EQ&feature=related

 ※HT-03Aは日本初のAndroid OS搭載のスマートフォン

Logの確認

 Logの確認にはLogCatビューを使用。
 表示されていない場合は、eclipseの下記メニューより表示。
 「ウィンドウ」→「ビューの表示」→「その他」→「Android」→「LogCat」

 稀にログが出力されなくなることがあるが、eclipseの再起動もしくは
 Android開発プラグインの再インストールで回避出来るとのこと。

 Logへの出力はLog.v("HelloAndroidWidget", "onEnabled");

ウィジェットをホームに貼る方法

 http://www.techfirm.co.jp/lab/android/widget.html

 ※ウィジェットとは、画面上に配置できる部品のことで、
  前回のようにextends Viewにより自分で作成したビューのことを
  「オリジナル・ウィジェット」などと呼んでいるようだ。
  ここでは、ホーム画面上に配置する部品ことを指す
  (Activityがないアプリになる。サポートはSDK1.5から)

  ただし、ウィジェットはアプリを転送しただけではだめで、
  ホーム画面を長押しして、ウィジェットを表示するように
  設定しないとだめ。