NexusOneでAPIDemos/CameraPreviewが落ちる件
NexusOneでカメラアプリを開発しようとするも、カメラプレビュー画面が起動せず落ちてしまう問題が発生しました。
まさかと思いつつ、APIDemosのCameraPreviewを試してみるとこちらも落ちるではありませんか!
“Invalid preview size requested: 533×295″…
プレビューサイズが不正みたいですね。
調べてみると、Android 2.0からCamera.getSupportedPreviewSizesでデバイスがサポートするプレビューサイズが取得できるようになっていました。
ではそれで回避するしかないですね。
。
。
。
ん?
僕はAndroid 1.6でアプリを作りたかったのですよ!
でも1.6ではまだこのメソッドが実装されていないんですよ!!
むぅ。こいつはどうすれば。。。
リフレクション
調べてみるとどうやらこういう方法でやっつけるようです。
Backward Compatibility for Applications | Android Developers
リフレクションですね。
上のリンクを参考に現バージョンにないメソッドを呼びたいので、以下のようにリフレクションを使ってメソッドアクセスをするようにしました。
しかし何とも気持ち悪い感じです。
全てのバージョンの違いをリフレクションで吸収しないとならないなんて面倒すぎます。
これがAndroidか。。。
と、愚痴はさておき、これで端末がサポートするカメラプレビューサイズを取得できるようになったので、カメラプレビューの方に手を入れます。
こんな感じです。
Reflect.getSupportedPreviewSizes(params)でAndroid 1.6にはないメソッドに対応しています。
返されるSizeのリストは大きい順に戻ってくるので、一番大きいサイズをここではセットしています。
一度設定したサイズはとっておいて、次に呼ばれるsurfaceChangedの所でも、同じサイズを設定してます。
これにて無事NexusOneでもカメラプレビューが表示できるようになりました!
こうしてみると480×800はやっぱデカイ。




[...] 詳しいやり方は「羅針盤」や「PICTRHYTHM」テックファームさんのブログ記事「NexusOneでAPIDemos/CameraPreviewが落ちる件」で取り上げられていた。この記事をありがたく参考にしてToyCamをアップ [...]
[...] NexusOneでAPIDemos/CameraPreviewが落ちる件 | Techfirm Android Lab [...]
[...] http://labs.techfirm.co.jp/android/cho/1647 [...]
[...] 「NexusOneでAPIDemo/CameraPreviewが落ちる件」に乗っているリフレクションを使って対応することにしました。 [...]