首页 > 代码库 > Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

在做camera和SurfaceView做摄像头程序时,需要获取camera支持的相片大小,在低版本sdk中没有getSupportedPictureSizes函数,怎么办呢,请参阅下面的关键代码:

1、定义Size类

 

public class Size {    /***     * Sets the dimensions for pictures.     *     * @param w the photo width (pixels)     * @param h the photo height (pixels)     */    public Size(int w, int h) {        width = w;        height = h;    }    /***     * Compares {@code obj} to this size.     *     * @param obj the object to compare this size with.     * @return {@code true} if the width and height of {@code obj} is the     *         same as those of this size. {@code false} otherwise.     */    @Override    public boolean equals(Object obj) {        if (!(obj instanceof Size)) {            return false;        }        Size s = (Size) obj;        return width == s.width && height == s.height;    }    @Override    public int hashCode() {        return width * 32713 + height;    }    /*** width of the picture */    public int width;    /*** height of the picture */    public int height;}

 

2、定义CameraHelper类

import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;import android.hardware.Camera;public class CameraHelper {    private static final String KEY_PREVIEW_SIZE = "preview-size";    private static final String KEY_PICTURE_SIZE = "picture-size";    private static final String SUPPORTED_VALUES_SUFFIX = "-values";    private Camera.Parameters mParms;    public CameraHelper(Camera.Parameters parm) {        this.mParms = parm;    }    public List<Size> GetSupportedPreviewSizes() {        String str = mParms.get(KEY_PREVIEW_SIZE + SUPPORTED_VALUES_SUFFIX);        return splitSize(str);    }    public List<Size> GetSupportedPictureSizes() {        String str = mParms.get(KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX);            return splitSize(str);    }            private ArrayList<Size> splitSize(String str) {        if (str == null)            return null;        StringTokenizer tokenizer = new StringTokenizer(str, ",");        ArrayList<Size> sizeList = new ArrayList<Size>();        while (tokenizer.hasMoreElements()) {            Size size = strToSize(tokenizer.nextToken());            if (size != null)                sizeList.add(size);        }        if (sizeList.size() == 0)            return null;        return sizeList;    }    private Size strToSize(String str) {        if (str == null)            return null;        int pos = str.indexOf(x);        if (pos != -1) {            String width = str.substring(0, pos);            String height = str.substring(pos + 1);            return new Size(Integer.parseInt(width), Integer.parseInt(height));        }        return null;    }}

其实,主要是通过Camera.Parameters的get方法,然后再解析获取的字符串来代替那些不存在的api。

 

Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?