【问题标题】:take picture without showing preview on screen拍照而不在屏幕上显示预览
【发布时间】:2017-12-16 16:46:40
【问题描述】:

有没有办法在没有预览的情况下获取照片并将其放入 android sdk 19 中的数据库 在下面的代码中,每 5 分钟自动获取位置并将标记放在地图上,另外我需要自动拍照并将其放入数据库

    public void startCountDown() {
    if (this._countDownTimer != null) {
        this._countDownTimer.cancel();
    }
    _countDownTimer = new CountDownTimer(60000 * 5, 60000*5) {
        @Override
        public void onFinish() {

        }
        @Override
        public void onTick(long millisUntilFinished) {
            putMarkerToLocation();
            takePhotoAndSaveIt2Db(); // ==> here what i need
        }
    }.start();
}

【问题讨论】:

  • “不显示预览”是什么意思?您可以只存储图像的路径而不查看它..
  • 这个项目是给打车的,我会得到打车的位置,和客户的照片到数据库,这个操作会在计价器自动启动时完成,无需人工控制
  • 好的,您需要什么帮助?
  • 我知道 java 但不知道 android 是否可以拍照 + 获取位置并将它们放入具有 CountDownTimer 下的函数的数据库中,如果不是,我将尝试寻找另一种策略
  • 是的,这绝对是可能的。拍摄图像后,您可以将其临时存储到设备中,然后将其上传到数据库,成功存储在数据库中后,您可以将其从设备中删除。位置很简单,一旦拍摄图像,您就可以获取位置并存储它,并且在使用 CountdownTimer 时它会完美运行

标签: android


【解决方案1】:

以下服务在 api19 上完美运行

public class CapPhoto extends Service {
private Camera mCamera;

@Override
public void onCreate() {
    super.onCreate();
    Log.d("CAM", "start");

    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy =
                new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    Thread myThread = null;


}

@Override
public void onStart(Intent intent, int startId) {
    takePhoto();
}

@Override
public IBinder onBind(Intent intent) {
    return null;
}

private void takePhoto() {

    System.out.println("Fotoraf Cekimi Hazirligi Basladi");
    Camera camera = null;

    int cameraCount = 0;
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    cameraCount = Camera.getNumberOfCameras();
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
        SystemClock.sleep(1000);

        Camera.getCameraInfo(camIdx, cameraInfo);

        try {
            camera = Camera.open(camIdx);
        } catch (RuntimeException e) {
            System.out.println("Camera not available: " + camIdx);
            camera = null;
            //e.printStackTrace();
        }
        try {
            if (null == camera) {
                System.out.println("Could not get camera instance");
            } else {
                System.out.println("Got the camera, creating the dummy surface texture");
                //SurfaceTexture dummySurfaceTextureF = new SurfaceTexture(0);
                try {
                    //camera.setPreviewTexture(dummySurfaceTextureF);
                    camera.setPreviewTexture(new SurfaceTexture(0));
                    camera.startPreview();
                } catch (Exception e) {
                    System.out.println("Could not set the surface preview texture");
                    e.printStackTrace();
                }
                camIdx = cameraCount;

                Camera.Parameters params = camera.getParameters();
                params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
                params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
                params.setExposureCompensation(0);
                params.setPictureFormat(ImageFormat.JPEG);
                params.setJpegQuality(100);
                params.setRotation(90);
                camera.setParameters(params);

                camera.takePicture(null, null, new Camera.PictureCallback() {

                    @Override
                    public void onPictureTaken(byte[] data, Camera camera) {
                        File pictureFileDir =new File(Environment.getExternalStorageDirectory(), "A");
                        if(!pictureFileDir.exists()){
                            pictureFileDir.mkdirs();
                        } //                            File pictureFileDir = getDir();
                        if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
                            return;
                        }
                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
                        String date = dateFormat.format(new Date());
                        String photoFile = "TaksiResim_" + "_" + date + ".jpg";
                        String filename = pictureFileDir.getPath() + File.separator + photoFile;
                        File mainPicture = new File(filename);
                        //addImageFile(mainPicture);

                        try {
                            FileOutputStream fos = new FileOutputStream(mainPicture);
                            fos.write(data);
                            fos.close();
                            System.out.println("resim kayit edildi");
                        } catch (Exception error) {
                            System.out.println("resim kayit edilemedi");
                        }
                        camera.release();
                    }
                });
            }
        } catch (Exception e) {
            camera.release();
        }
    }
} }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 2011-01-24
    • 1970-01-01
    • 2023-04-10
    • 2012-06-03
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多