NexusOneでAPIDemos/CameraPreviewが落ちる件

By daichi1128
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

NexusOneでカメラアプリを開発しようとするも、カメラプレビュー画面が起動せず落ちてしまう問題が発生しました。
まさかと思いつつ、APIDemosのCameraPreviewを試してみるとこちらも落ちるではありませんか!

camerapreview_error

エラーメッセージを見るとこんなものが。。。
log

“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でもカメラプレビューが表示できるようになりました!

iikuma

こうしてみると480×800はやっぱデカイ。

関連する投稿


  1. [...] 詳しいやり方は「羅針盤」や「PICTRHYTHM」テックファームさんのブログ記事「NexusOneでAPIDemos/CameraPreviewが落ちる件」で取り上げられていた。この記事をありがたく参考にしてToyCamをアップ [...]

  2. [...] NexusOneでAPIDemos/CameraPreviewが落ちる件 | Techfirm Android Lab [...]

  3. [...] 「NexusOneでAPIDemo/CameraPreviewが落ちる件」に乗っているリフレクションを使って対応することにしました。 [...]

Leave a Reply

Additional comments powered by BackType