参考情報(開発者向け)

Share

型番リーダー作成時のメモなどをまとめておきます。

なお、まとめたほうが役に立ちそうだと思ったものは、本サイトの『メモ』→『スマートフォン』にも書く予定ですので、そちらもご参考にしてください。

 

設計について

本アプリは、『Google Android アプリケーション開発入門』のバーコードリーダーのサンプルを参考に作成しました。もっとも、結果表示をダイアログ形式ではなく、activityで行うようにしたため、大きく変わってしまってます。

一応、設計時の考え方を(覚えている範囲で)まとめておきます。

  • 機能的には、型番読み取り機能単機能にして、他のアプリから呼び出して実行/他のアプリを呼び出して実行、といったアプリ間の連携を意識しています。
  • カメラは横固定です。
    • なお、横固定なので、縦横変化にともなうActivityの生成/破棄への対応は行っていません(AsyncTask使用時に、Activityにたいしてプログレスダイアログを生成するので、縦横回転がある場合はここで問題が生じます)。
  • カメラで取得する処理対象画像は、プレビューから取得されるフレーム単位の画像を使っています。
    • これは、カメラのtakePictureメソッドで取得する画像だとサイズが大きすぎて取り回しが大変なことと、撮影による取得画像とディスプレイのアスペクト比が異なるのでファインダー位置を再計算するのが面倒だったためです。
    • プレビュー画像は、setOnPreviewCallbackではなく、setOneShotPreviewCallbackを使いました。1フレームだけを処理するためです。
  • FinderFrameとCameraPreviewはお互いを直接的に保持せず、必要に応じてActivity経由で処理を行っています。
    • 将来、再利用を考えた時になるべく簡単になるようにとのことです。
  • プレビュー画像のデコード/WeOCRへの問い合わせ/画像ファイルの生成、などはAsyncTaskを使い、別スレッドで処理を行います。
  • 結果表示画面をダイアログではなくインテントにしています
    • 結果表示画面からもmenuキーで設定画面を呼び出しためです。ダイアログから可能かどうか分からなかったので採用しませんでした。
  • インテント間の画像の受け渡しは、一時的なファイルを作成して使っています。
    • これは製造時の最初の方では、out of memory で落ちることがよくあったため、Extraにくっつけるサイズを小さくする方がよいのではないかと思ったためです。ただ、今となっては有効であったかどうかは不明です。
  • Log出力はすべて出さないのではなく、error/warning/informationは配布しているアプリでも常に出しています。これは 問題発生時に調査が容易になることを期待してのことです。一方、debug/verboseは開発時には有効ですが、リリース時には出力を抑制していま す。
    • 具体的には、android.util.Logクラスの代わりに、オリジナルのLogクラスを用意し、AndroidManifest.xmlのdebuggable設定に応じて、debug/verbose出力を抑制するようにしました。
    • マニフェストの内容を調べるため、Utilクラスを設け、アプリのスタートアクティビティのonCreateで初期化します。
  • 例外報告は、基本的に例外を捕らえたところでは何もせず、呼び出し側でcatchし、必要なメッセージを表示するようにしています。

参考にしたサイト

多くの情報をインターネットから得ました。漏れがあるかもしれませんが、分かる範囲で書いておきます。

カメラでの撮影一般

@IT もはやケータイに必須のカメラをAndroidで制御しよう

Techfirm Android Lab Androidでカメラから撮影画像を取得する

プレビューフレームで得られるデータフォーマットからダイレクトにBitmapを生成できない件

涙目ブログ androidでカメラを制御。なんか変だよGoogleさん

http://code.google.com/p/android/issues/detail?id=823

カメラのプレビューサイズ問題(Nexus One等で発生)

Techfirm Android Lab NexusOneでAPIDemos/CameraPreviewが落ちる件

camera setPreviewSize, on Nexus One, apiVersion 7(英語)

設定画面の作り方

Techfirm Android Lab Android入門【第3回:設定画面を作る】PreferenceActivity

設定画面の作り方(PreferenceActivity)

プリファレンスのサマリに設定値を反映する方法(英語)

AyncTaskの使い方

初めてのAndroid -第7章 世界との接続-

AndroidでAsyncTaskを使ったバックグラウンド処理

Techfirm Android Lab AsyncTaskでユーザビリティを向上させる

AyncTaskによる問題が発生する可能性について

Androidでのメモリリーク回避

Android: ダイアログを表示して縦横が変わるとdismissでエラー

Avoiding memory leaks(メモリリークを指摘したブログ記事)

Avoiding memory leaks (超訳) (上記記事の日本語訳)

マルチパートのHTTP POST関連

HTTP POST (multipart/form-data) on Android(英語)

httpclient multipart form upload(英語)

Multipart form upload on Android(英語)

URLConnectionを使い、POST型で、CGIを呼び出すには

Useful Code of the Day: Multipart Form File Upload(英語)

クリップボード関連

クリップボードへ値をコピー。

メーラー呼び出し関連

Intent(インテント)連携をまとめてみる

メーラーの起動

メーラーを起動する暗黙的Intentについて

Android: インテント(ACTION_SEND)でメーラー一覧を起動し画像を添付する

インテントに画像を渡す方法(Gmailで画像の添付ファイルが失敗する事例)

ログ出力関連

Androidで自動オフできるログ出力

Taosoftware: Android ApiキーをRelease版とDebug版で切り替える方法

(2010/7/28追加)

TextViewでHTMLタグを使う方法

TextView を使いこなそう 縲鰀 表示編 縲怐@ その2

TextView を使いこなそう 縲鰀 表示編 縲怐@ その3

TextViewでスクロールする方法

AndroidのTextViewをスクロールさせる方法