2013年4月10日水曜日

Android機種依存(カメラ編) 鬼門その1

Android開発の鬼門と呼ばれているカメラアプリですが、もうたくさんの先人たちがつくってるしまあ大丈夫だろうと軽い気持ちでやったらはまりました…
強制終了の嵐です。

鬼門その1
setPictureSizeにはgetSupportedPictureSizesで得られるセット以外は入れない

持ってる実機で通ったからといって安心してはいけません。
適当なサイズを入れるとコロッと落ちます
あとgetSupportedPictureSizes()で得られるリストの1個目を使うサンプルがよくありますが、このリストは大きい順に並んでいる保証はないようです。
いずれにしろ画像取得する時の処理も考えると、大きさの制限を入れて値を見ながら取得するほうがいいでしょう 。
今回実装したのは以下のような感じです。

public void setPictureSize(Camera cam, int maxWidth) {
    //端末がサポートするサイズ一覧取得
    Camera.Parameters params = cam.getParameters();
    List<Size> sizes = params.getSupportedPictureSizes();
    if ( sizes != null && sizes.size() > 0) {
        //撮影サイズを設定する
        Size setSize = sizes.get(0);
        for(Size size : sizes){
            if(Math.min(size.width, size.height) <= maxWidth) {
                setSize = size;
                break;
            }
        }
        params.setPictureSize(setSize.width, setSize.height);
        cam.setParameters(params);
    }
}

0 件のコメント:

コメントを投稿