参考資料

ToyMonitorCam開発時に参考になったWebページをいくつか。

電池残量を取得するのにブロードキャストの受信を使うことを覚えました。

プレビュー画面を作りなおす際に参考にしました。プレビューから画像の生成はスレッドを立ててUIのブロッキングを防いでいたのですが、それだと今度は画面の再描画ができないということでTimerを使って再描画リクエストをUIスレッドに投げるような仕組みが必要でした。

Androidのカメラ周りは本当に鬼門です。 ToyMonitorCamの画像サイズ選択ではカメラのプレビューサイズを取得・変更機能を使っているのですが、「設定不可能なサイズも『使える』と言ってくる」「設定に失敗してフォールバックの設定が内部で行われたのにそれを知る手段がない(getPreviewSize()が虚偽の申告をしてくる)」など、実にf○ckinな状況になっていました。

結局は「使えないサイズのデータベース」を作って選択可能か否かの判定を行うという泥臭いことをしてこの問題を回避しています。

この辺はPreferenceActivityの summaryを動的に変えたいといった時に役に立ちました。そういえばPreferenceActivityのリストではvaluesに文字列しか使えないというのも結構はまりどころだった気がします。

最後はネイティブコードによる高速化について。今回使用した画像エフェクト処理においては、Java側で用意したバッファに対する読み書きだけなのでさほど難しくはありませんでした。一応arm以外のプラットホームでも動かせるように Javaでも同様の処理は実装しておき、x86など ネイティブコードが使えない環境でも動くようにしています。実行時に JNIの有効無効を判定して呼び出すAPIを切り替えています。