代码之家  ›  专栏  ›  技术社区  ›  Vishal Khakhkhar

Android OS 2.0及更高版本的相机预览出现问题

  •  2
  • Vishal Khakhkhar  · 技术社区  · 14 年前

    我正在使用android的增强现实应用程序,我实现了相机代码。

    我当前的基本SDK版本是1.6。有了它,我的应用程序可以很好地处理操作系统版本高达1.6的设备,并且在操作系统2.0和更高版本上出现问题。。

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Vishal Khakhkhar    14 年前

    我在谷歌上找到了下面的解决方案。。将surfacechanged方法替换为以下方法

    private static Method getSupportedPreviewSizes = null;
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    
        try {
            Camera.Parameters parameters = camera.getParameters();
    
            Integer version = Integer.parseInt(Build.VERSION.SDK);
    
            if (version >= Build.VERSION_CODES.ECLAIR) {
    
                try {
                    getSupportedPreviewSizes = Parameters.class.getMethod(
                            "getSupportedPreviewSizes", (Class[]) null);
                    /* success, this is a newer device */
                } catch (NoSuchMethodException nsme) {
                    /* failure, must be older device */
                }
    
                Object supportedFormats = getSupportedPreviewSizes.invoke(
                        parameters, (Object[]) null);
                List<Size> sizes;
                if (supportedFormats instanceof List<?>) {
                    sizes = (List<Camera.Size>) supportedFormats;// params.getSupportedPreviewSizes();
                    Size optimalSize = getOptimalPreviewSize(sizes, w, h);
                    parameters.setPreviewSize(optimalSize.width,
                            optimalSize.height);
                }
            } else {
    
                parameters.setPreviewSize(100, 100);
            }
            parameters.setPictureSize(320, 480);
    
            camera.setParameters(parameters);
            camera.startPreview();
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    
    }