【问题标题】:Android camera fails taking a picture every secondAndroid相机每秒无法拍照
【发布时间】:2016-05-08 12:07:12
【问题描述】:

首先让我说,如果图像拍摄间隔超过 1 秒,它就可以工作。例如,每 2 秒拍一张照片效果很好。但是有时每秒拍一张照片会抛出java.lang.RuntimeException: takePicture failed。什么可能导致这种行为?

这是我使用的代码,它在 Service 中:

@Override
public void onCreate()
{
    super.onCreate();
    prefs = getSharedPreferences("general",Context.MODE_PRIVATE);
    handler = new Handler();

    shotInterval = prefs.getInt(getString(R.string.prefs_int_imageShootingFrequency),1);

    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
        Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG).show();
    } else {
        cameraId = findBackFacingCamera();
        if (cameraId < 0) {
            Toast.makeText(this, "No front facing camera found.",Toast.LENGTH_LONG).show();
        } else {
            camera = Camera.open(cameraId);
        }
    }

    cameraParameters = camera.getParameters();
    cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); //set camera to continuously auto-focus
    camera.setParameters(cameraParameters);

    pictureTaker.run(); // Start looping
}

Runnable pictureTaker = new Runnable() {
    @Override
    public void run() {
        try {
            takePicture();
        } finally {
            // 100% guarantee that this always happens, even if
            // your update method throws an exception
            handler.postDelayed(pictureTaker, shotInterval*1000);
        }
    }
};

private void takePicture(){
    SurfaceView view = new SurfaceView(this);
    try {
        camera.setPreviewDisplay(view.getHolder());
        camera.startPreview();
        camera.takePicture(null, null,new PhotoHandler(getApplicationContext()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 如果我不得不猜测,我会说当您致电takePicture 时相机还没有准备好拍摄下一张照片。 1 秒的间隔对我来说似乎很快。
  • 我已经看到程序(不使用camera2 API)成功地做到了这一点。奇怪的是它有时有效,有时无效。
  • 这些程序可能运行不同的硬件。您的相机可能只是速度较慢。
  • 不,我的意思是我也在我的设备上测试过它们。我还有一个旗舰安卓设备。

标签: java android android-camera android-service


【解决方案1】:

您应该从onPictureTaken() 回调中启动postDelayed()。你可以去takePicture()查看系统定时器,并分别减少延迟,保持1000ms的重复,但也许偶尔,这个延迟会达到0。

【讨论】:

  • onPictureTaken() 不是 camera2 API 的一部分吗?
  • 不,请关注link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
相关资源
最近更新 更多