1

我正在开发一个不使用意图的android自定义相机应用程序(以避免获得android的内置相机功能)。我在我的应用程序中启用了自动对焦功能。我正在按下按键音量按钮拍照。我正在使用下面的代码来设置参数。

    Camera.Parameters p = camera.getParameters();
    camera.autoFocus(autoFocusCallback);
    p.setFocusMode(Parameters.FOCUS_MODE_AUTO);
    camera.setParameters(p1);
    camera.takePicture(shutterCallback, rawCallback, jpgCallback);


    void setHandler(Handler autoFocusHandler, int autoFocusMessage) 
    {
           this.autoFocusHandler = autoFocusHandler;
           this.autoFocusMessage = autoFocusMessage;
    }

    private AutoFocusCallback autoFocusCallback = new AutoFocusCallback() 
    {
         private Object success;
         @Override
         public void onAutoFocus(boolean autoFocusSuccess, Camera camera)
         {  
              if (autoFocusHandler != null)
              {
                    Message message = autoFocusHandler.obtainMessage(autoFocusMessage, success);
                    autoFocusHandler.sendMessageDelayed(message, AUTOFOCUS_INTERVAL_MS);
                    autoFocusHandler = null;
              }
              else
              {

              }
         }
};

但问题是,此代码仅适用于 LG 手机。并且在运行它后,我正在强制关闭所有其他手机。

错误日志看起来像这样

http://textuploader.com/?p=6&id=kOc9G

没有得到我要去的地方。请帮忙!谢谢!

4

3 回答 3

2

不同的手机有不同的相机参数。在实际设置它之前检查模式是否可用。

例如,在您的情况下,有类的public List<String> getSupportedFocusModes ()功能 Camera.Parameters

Afaik,像宏碁或中兴或其他一些廉价手机,对其相机的编程支持非常弱。

UPD:代码示例

    Camera.Parameters p = camera.getParameters();
    List<String> modes = p.getSupportedFocusModes();
    if(modes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
    {
        p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
        camera.setParameters(p);
        camera.autoFocus(autoFocusCallback);

    }
    else
    {
        // this is default focus mode if autofocus unsupported.
        // also, we should not call camera.autoFocus(autoFocusCallback) here
        p.setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED);
        camera.setParameters(p);
    }
于 2013-09-03T13:01:34.527 回答
1

您正在使用

 Camera.Parameters p = camera.getParameters();

所以更换

 camera.setParameters(p1);

 camera.setParameters(p);

我想这应该可以帮助你....

Camera.Parameters p = camera.getParameters();
List<Size> sizes = p.getSupportedPictureSizes();
// Choose any one you want among sizes
size = sizes.get(0);
p.setPictureSize(size.width, size.height);
camera.setParameters(p);
于 2013-09-03T13:07:38.463 回答
1

不要使用“p.setFocusMode(Parameters.FOCUS_MODE_AUTO);” 线。

默认情况下,焦点模式为 FOCUS_MODE_AUTO。

于 2013-09-11T13:29:35.623 回答