簡體   English   中英

Android 相機每秒無法拍照

[英]Android camera fails taking a picture every second

首先讓我說,如果圖像拍攝間隔超過 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();
    }
}

您應該從onPictureTaken()回調中啟動postDelayed() 您可以在調用takePicture()檢查系統計時器並分別減少延遲,以保持 1000 毫秒的重復,但可能偶爾,此延遲會達到 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM