强制关闭Android Custom Camera应用程序

时间:2013-09-03 12:52:22

标签: java android camera android-camera commonsware-cwac

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

    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

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

3 个答案:

答案 0 :(得分:2)

不同的手机有不同的相机参数。检查模式是否可以实际设置befire。

例如,在您的情况下,有public List<String> getSupportedFocusModes ()函数 Camera.Parameters上课。

Afaik,像acer或zte等廉价手机,对其相机的编程支持非常弱。

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);
    }

答案 1 :(得分: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);

答案 2 :(得分:1)

请勿使用“p.setFocusMode(Parameters.FOCUS_MODE_AUTO);”线。

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