利用反射获取Camera支持尺寸大小

来源:互联网 发布:linux一键安装脚本 编辑:程序博客网 时间:2024/06/01 09:32
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.List;import android.hardware.Camera;import android.hardware.Camera.Size;public class SupportedSizesReflect {    private static Method Parameters_getSupportedPreviewSizes = null;    private static Method Parameters_getSupportedPictureSizes = null;    static {        initCompatibility();    };    private static void initCompatibility() {        try {            Parameters_getSupportedPreviewSizes = Camera.Parameters.class                    .getMethod("getSupportedPreviewSizes", new Class[] {});            Parameters_getSupportedPictureSizes = Camera.Parameters.class                    .getMethod("getSupportedPictureSizes", new Class[] {});        } catch (NoSuchMethodException nsme) {            nsme.printStackTrace();            Parameters_getSupportedPreviewSizes = Parameters_getSupportedPictureSizes = null;        }    }    /**     * Android 2.1之后有效     *      * @param p     * @return Android1.x返回null     */    public static List<Size> getSupportedPreviewSizes(Camera.Parameters p) {        return getSupportedSizes(p, Parameters_getSupportedPreviewSizes);    }    public static List<Size> getSupportedPictureSizes(Camera.Parameters p) {        return getSupportedSizes(p, Parameters_getSupportedPictureSizes);    }    @SuppressWarnings("unchecked")    private static List<Size> getSupportedSizes(Camera.Parameters p,            Method method) {        try {            if (method != null) {                return (List<Size>) method.invoke(p);            } else {                return null;            }        } catch (InvocationTargetException ite) {            Throwable cause = ite.getCause();            if (cause instanceof RuntimeException) {                throw (RuntimeException) cause;            } else if (cause instanceof Error) {                throw (Error) cause;            } else {                throw new RuntimeException(ite);            }        } catch (IllegalAccessException ie) {            return null;        }    }}Camera.Parameters params = mCamera.getParameters();                        List<Size> supportedPictureSizes                        = SupportedSizesReflect.getSupportedPictureSizes(params);            List<Size> supportedPreviewSizes                        = SupportedSizesReflect.getSupportedPreviewSizes(params);                     if ( supportedPictureSizes != null &&                supportedPreviewSizes != null &&                supportedPictureSizes.size() > 0 &&                supportedPreviewSizes.size() > 0) {                         //2.x                Size pictureSize = supportedPictureSizes.get(0);                         int maxSize = 1920;                if(maxSize > 0){                    for(Size size : supportedPictureSizes){                                     if(maxSize >= Math.max(size.width,size.height)){                            pictureSize = size;                            break;                        }                                            }                }                         Size previewSize = getOptimalPreviewSize(                                    supportedPreviewSizes,                                    DisplayUtil.getDisplayWidth(),                                    DisplayUtil.getDisplayHeight());                         params.setPictureSize(pictureSize.width, pictureSize.height);                        params.setPreviewSize(pictureSize.width, pictureSize.height);                                                         Log.i(TAG, "pictureSize .width:" + pictureSize.width                        + "---height:" + pictureSize.height);                                Log.i(TAG, "previewSize .width:" + previewSize.width                        + "---height:" + previewSize.height);            }            mCamera.setParameters(params);

0 0
原创粉丝点击