关闭屏幕一段时间后无法自动拍照

问题描述 投票:0回答:1
private void takeSnapShots() {
    Log.e(TAG, "takeSnapShots: " + "Start");
    // here below "this" is activity context.
    SurfaceView surface = new SurfaceView(this);
    Camera camera = Camera.open();
    try {
        camera.setPreviewDisplay(surface.getHolder());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    camera.startPreview();
    camera.takePicture(null,null,jpegCallback);
}


/** picture call back */
android.hardware.Camera.PictureCallback jpegCallback = new android.hardware.Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera)
    {
        FileOutputStream outStream = null;
        try {
            String dir_path = "/storage/C897-99BC/Android/data/com.dbsource.dbinsert/NewFolder/";
            Date currentTime = Calendar.getInstance().getTime();
            outStream = new FileOutputStream(dir_path+ File.separator+currentTime.getTime()+".jpg");
            outStream.write(data);
            outStream.close();
            Log.d("CAM", "onPictureTaken - wrote bytes: " + data.length);
        } catch (FileNotFoundException e) {
            Log.e(TAG, "onPictureTaken: " + e.toString());
            e.printStackTrace();
        } catch (IOException e) {
            Log.e(TAG, "onPictureTaken: " + e.toString());
            e.printStackTrace();
        } finally {
            camera.stopPreview();
            camera.release();
            camera = null;
            Log.e(TAG, "takeSnapShots: " + "End");


        }
        Log.d("CAM" ,"onPictureTaken - jpeg");
    }
};`

我使用上面的代码和TimerTask来每2秒触发一次函数。起初效果很好。但是,在拍摄了几张照片之后,TimerTask继续工作,但是没有拍照。

错误代码

/ com.dbsource.dbinsert E / Camera_APM :: [APM] APM的线程已启动/com.dbsource.dbinsert E / Camera_APM ::: [APM]此应用是地面应用/? E / CameraService:访问被拒绝:不能通过空闲的UID使用摄像机pid = 5436,uid = 10275/com.dbsource.dbinsert E / CAM:java.lang.RuntimeException:无法连接到摄像头服务

更新

在camera.release()之后,在我调用该函数之前,发生了相机“错误3”。

android android-camera timertask
1个回答
0
投票

由于以下限制,我在评论栏中输入了我的评论:“您必须拥有50个声誉才能发表评论”。

无论如何,回到您的问题。 IMO,对于摄像机的重复操作,“ 2秒”太快了。当然,它可能会工作几次,但最终会崩溃。可能会发生很多RuntimeExceptions,可能与相机,存储写入等有关。如果可能,请延长时间。如果没有,您可能必须在网络上搜索其他替代实现。

© www.soinside.com 2019 - 2024. All rights reserved.