Java 无法从服务启动服务

Java 无法从服务启动服务,java,android,Java,Android,我希望实现以下目标: 我有一部旧手机(安卓操作系统),我不再使用它了,我喜欢把它放在我们周末家的窗户后面。我会用firebase控制它。当我将一个孩子添加到某个密钥中时,服务应该会触发手机的摄像头并拍照。 现在我有两件事: 一个简单的服务,在发生任何变化时监听firebase 无需任何用户交互即可拍照的照相机服务 我的问题是我不能将这两件事结合起来,因为我可以从活动而不是从服务启动ApitureCapturingService中的startCapturing()方法。我应该如何解决这个问题?谢谢

我希望实现以下目标: 我有一部旧手机(安卓操作系统),我不再使用它了,我喜欢把它放在我们周末家的窗户后面。我会用firebase控制它。当我将一个孩子添加到某个密钥中时,服务应该会触发手机的摄像头并拍照。 现在我有两件事:

  • 一个简单的服务,在发生任何变化时监听firebase
  • 无需任何用户交互即可拍照的照相机服务
  • 我的问题是我不能将这两件事结合起来,因为我可以从活动而不是从服务启动ApitureCapturingService中的startCapturing()方法。我应该如何解决这个问题?谢谢

    public class FiBaService extends Service  {
    
        public static final int MY_PERMISSIONS_REQUEST_ACCESS_CODE = 1;
        //public APictureCapturingService pictureService;
        DatabaseReference mdb;
        String user, post;
    
    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handleFIBA();
        return START_STICKY;
    }
    
    @Override
    public void onCreate() {
        mdb = FirebaseDatabase.getInstance().getReference();
    }
    
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
    }
    
    
    public void handleFIBA() {
        //Toast.makeText(this, "dosomethingban!", Toast.LENGTH_SHORT).show();
        FirebaseDatabase.getInstance().getReference().child
                ("phones4streams").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                /*
                String userName = (dataSnapshot.getValue(String.class)).toString();
                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                for (DataSnapshot dsp : dataSnapshot.getChildren()) {
                    //Userlist.add(String.valueOf(dsp.geValue())); //add result into array list
                    Toast.makeText(CameraActivity.this, dsp.toString(), Toast.LENGTH_SHORT).show();
                }
                Toast.makeText(FiBa.this, userName, Toast.LENGTH_SHORT).show();
                */
            }
    
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                //String userName = (dataSnapshot.getValue(String.class).toString());
                //Toast.makeText(SettingsActivity.this, "Történt változás", Toast.LENGTH_SHORT)
                //        .show();
                Toast.makeText(FiBaService.this, "Starting capture!", Toast.LENGTH_SHORT)
                        .show();
                //pictureService.startCapturing(FiBaService.this);
                FirebaseDatabase.getInstance().getReference().child
                        ("phones4streams").child("alamade").setValue("csalamade");
                takePic();
            }
    
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
    
            }
    
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }
    
    在其他活动中,我实例化此类,如:

    public APictureCapturingService pictureService;
    pictureService = PictureCapturingServiceImpl.getInstance(this);
    pictureService.startCapturing(SettingsActivity.this);
    
    编辑 尝试使用广播接收器时,我得到了相同的结果:需要活动

    PictureCapturingServiceImpl:

    /**
     * The aim of this service is to secretly take pictures (without preview or opening device's
     * camera app)
     * from all available cameras using Android Camera 2 API
     *
     * @author hzitoun (zitoun.hamed@gmail.com)
     */
    
    @TargetApi(Build.VERSION_CODES.LOLLIPOP) //NOTE: camera 2 api was added in API level 21
    public class PictureCapturingServiceImpl extends APictureCapturingService {
    
        private static final String TAG = PictureCapturingServiceImpl.class.getSimpleName();
    
        private CameraDevice cameraDevice;
        private ImageReader imageReader;
        /***
         * camera ids queue.
         */
        private Queue<String> cameraIds;
    
        private String currentCameraId;
        private boolean cameraClosed;
        /**
         * stores a sorted map of (pictureUrlOnDisk, PictureData).
         */
        private TreeMap<String, byte[]> picturesTaken;
        private PictureCapturingListener capturingListener;
    
        /***
         * private constructor, meant to force the use of {@link #getInstance}  method
         */
        private PictureCapturingServiceImpl(final Activity activity) {
            super(activity);
        }
    
        /**
         * @param activity the activity used to get the app's context and the display manager
         * @return a new instance
         */
        public static APictureCapturingService getInstance(final Activity activity) {
            return new PictureCapturingServiceImpl(activity);
        }
    
        /**
         * Starts pictures capturing treatment.
         *
         * @param listener picture capturing listener
         */
        @Override
        public void startCapturing(final PictureCapturingListener listener) {
            this.picturesTaken = new TreeMap<>();
            this.capturingListener = listener;
            this.cameraIds = new LinkedList<>();
            try {
                final String[] cameraIds = manager.getCameraIdList();
                System.out.println("cameraIds length: " + cameraIds.length);
                System.out.println("cameraId[0]: " + cameraIds[0]);
                System.out.println("cameraId[1]: " + cameraIds[1]);
                if (cameraIds.length > 0) {
                    this.cameraIds.addAll(Arrays.asList(cameraIds));
                    // a currentCameraId lesz a cameraIds első eleme, de a caneraIds-ból remove-olva
                    // lesz
                    // ez az első elem
                    this.currentCameraId = this.cameraIds.poll();
                    openCamera();
                } else {
                    //No camera detected!
                    capturingListener.onDoneCapturingAllPhotos(picturesTaken);
                }
            } catch (final CameraAccessException e) {
                Log.e(TAG, "Exception occurred while accessing the list of cameras", e);
            }
        }
    
    
        private void openCamera() {
            Log.d(TAG, "opening camera " + currentCameraId);
            try {
                if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
                        == PackageManager.PERMISSION_GRANTED
                        && ActivityCompat.checkSelfPermission(context,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        == PackageManager.PERMISSION_GRANTED) {
                    manager.openCamera(currentCameraId, stateCallback, null);
                }
            } catch (final CameraAccessException e) {
                Log.e(TAG, " exception occurred while opening camera " + currentCameraId, e);
            }
        }
    
    
        private final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession
                .CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull
                    CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {
                super.onCaptureCompleted(session, request, result);
                if (picturesTaken.lastEntry() != null) {
                    capturingListener.onCaptureDone(picturesTaken.lastEntry().getKey(), picturesTaken
                            .lastEntry().getValue());
                    Log.i(TAG, "done taking picture from camera " + cameraDevice.getId());
                }
                closeCamera();
            }
        };
    
    
        private final ImageReader.OnImageAvailableListener onImageAvailableListener = (ImageReader
                                                                                               imReader) -> {
            final Image image = imReader.acquireLatestImage();
            final ByteBuffer buffer = image.getPlanes()[0].getBuffer();
            final byte[] bytes = new byte[buffer.capacity()];
            buffer.get(bytes);
            saveImageToDisk(bytes, timeStamp);
            image.close();
        };
    
    
        private final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
            @Override
            public void onOpened(@NonNull CameraDevice camera) {
                cameraClosed = false;
                Log.d(TAG, "camera " + camera.getId() + " opened");
                cameraDevice = camera;
                Log.i(TAG, "Taking picture from camera " + camera.getId());
                //Take the picture after some delay. It may resolve getting a black dark photos.
                new Handler().postDelayed(() -> {
                    try {
                        takePicture();
                    } catch (final CameraAccessException e) {
                        Log.e(TAG, " exception occurred while taking picture from " +
                                currentCameraId, e);
                    }
                }, 500);
            }
    
    
            @Override
            public void onDisconnected(@NonNull CameraDevice camera) {
                Log.d(TAG, " camera " + camera.getId() + " disconnected");
                if (cameraDevice != null && !cameraClosed) {
                    cameraClosed = true;
                    cameraDevice.close();
                }
            }
    
    
            @Override
            public void onClosed(@NonNull CameraDevice camera) {
                cameraClosed = true;
                Log.d(TAG, "camera " + camera.getId() + " closed");
                //once the current camera has been closed, start taking another picture
                //if (!cameraIds.isEmpty()) {
                if (cameraIds.size() != 1 && !cameraIds.isEmpty()) {
                    takeAnotherPicture();
                } else {
                    capturingListener.onDoneCapturingAllPhotos(picturesTaken);
                }
            }
    
    
            @Override
            public void onError(@NonNull CameraDevice camera, int error) {
                Log.e(TAG, "camera in error, int code " + error);
                if (cameraDevice != null && !cameraClosed) {
                    cameraDevice.close();
                }
            }
        };
    
    
        private void takePicture() throws CameraAccessException {
            if (null == cameraDevice) {
                Log.e(TAG, "cameraDevice is null");
                return;
            }
            final CameraCharacteristics characteristics = manager.getCameraCharacteristics
                    (cameraDevice.getId());
            Size[] jpegSizes = null;
            StreamConfigurationMap streamConfigurationMap = characteristics.get(CameraCharacteristics
                    .SCALER_STREAM_CONFIGURATION_MAP);
            if (streamConfigurationMap != null) {
                jpegSizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG);
            }
            final boolean jpegSizesNotEmpty = jpegSizes != null && 0 < jpegSizes.length;
            int width = jpegSizesNotEmpty ? jpegSizes[0].getWidth() : 640;
            int height = jpegSizesNotEmpty ? jpegSizes[0].getHeight() : 480;
            final ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
            final List<Surface> outputSurfaces = new ArrayList<>();
            outputSurfaces.add(reader.getSurface());
            final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest
                    (CameraDevice.TEMPLATE_STILL_CAPTURE);
            captureBuilder.addTarget(reader.getSurface());
            captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
            captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation());
            reader.setOnImageAvailableListener(onImageAvailableListener, null);
            cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
                        @Override
                        public void onConfigured(@NonNull CameraCaptureSession session) {
                            try {
                                session.capture(captureBuilder.build(), captureListener, null);
                            } catch (final CameraAccessException e) {
                                Log.e(TAG, " exception occurred while accessing " + currentCameraId, e);
                            }
                        }
    
                        @Override
                        public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                        }
                    }
                    , null);
        }
    
        //cYou - átírva a képek mentési helye a cyou mappába 240. sor
        private void saveImageToDisk(final byte[] bytes, String timeStamp) {
            final String cameraId = this.cameraDevice == null ? UUID.randomUUID().toString() : this
                    .cameraDevice.getId();
            final File file = new File(Environment.getExternalStorageDirectory() + "/mup/" +
                    Sta.getCurrentTimeStamp() + "_pic.jpg");
            try (final OutputStream output = new FileOutputStream(file)) {
                output.write(bytes);
                this.picturesTaken.put(file.getPath(), bytes);
            } catch (final IOException e) {
                Log.e(TAG, "Exception occurred while saving picture to external storage ", e);
            }
        }
    
        private void takeAnotherPicture() {
            this.currentCameraId = this.cameraIds.poll();
            openCamera();
        }
    
        private void closeCamera() {
            Log.d(TAG, "closing camera " + cameraDevice.getId());
            if (null != cameraDevice && !cameraClosed) {
                cameraDevice.close();
                cameraDevice = null;
            }
            if (null != imageReader) {
                imageReader.close();
                imageReader = null;
            }
        }
    
    /**
    *此服务的目的是秘密拍照(无需预览或打开设备的
    *摄像头应用程序)
    *使用Android Camera 2 API从所有可用的摄像头
    *
    *@作者hzitoun(zitoun。hamed@gmail.com)
    */
    @TargetApi(Build.VERSION\u CODES.LOLLIPOP)//注意:Camera2 api是在api级别21中添加的
    公共类PictureCapturingServiceImpl扩展了ApitureCapturingService{
    私有静态最终字符串标记=PictureCapturingServiceImpl.class.getSimpleName();
    私人摄像设备;
    私人图像阅读器;
    /***
    *摄像机ID队列。
    */
    私人队列突击检查;
    私有字符串数组;
    私有布尔摄像机关闭;
    /**
    *存储(PictureEurlonDisk、PictureData)的已排序地图。
    */
    私人树形图;
    私人图片capturingListener capturingListener;
    /***
    *私有构造函数,用于强制使用{@link#getInstance}方法
    */
    私有图片许可服务Impl(最终活动){
    超级(活动);
    }
    /**
    *@param activity用于获取应用程序上下文和显示管理器的活动
    *@返回一个新实例
    */
    公共静态ApitureCapturingService getInstance(最终活动){
    返回新的PictureCapturingServiceImpl(活动);
    }
    /**
    *开始图片捕获治疗。
    *
    *@param listener图片捕获侦听器
    */
    @凌驾
    public void startCapturing(最终图片CapturingListener侦听器){
    this.picturesTaken=newtreemap();
    this.capturingListener=监听器;
    this.cameraIds=newlinkedlist();
    试一试{
    最后一个字符串[]cameraIds=manager.getCameraIdList();
    System.out.println(“cameraIds长度:+cameraIds.length”);
    System.out.println(“cameraIds[0]:”+cameraIds[0]);
    System.out.println(“cameraIds[1]:”+cameraIds[1]);
    如果(cameraIds.length>0){
    this.cameraIds.addAll(Arrays.asList(cameraIds));
    //当前的cameraIds lesz a cameraIds elsőeleme,de a caneraIds-ból remove olva
    //莱兹
    //埃兹·阿兹·厄勒姆
    this.currentCameraId=this.cameraIds.poll();
    openCamera();
    }否则{
    //没有检测到摄像头!
    capturingListener.onDoneCapturingAllPhotos(picturesTaken);
    }
    }捕捉(最终摄影机){
    Log.e(标签“访问摄像机列表时发生异常”,e);
    }
    }
    私有void openCamera(){
    Log.d(标签“打开摄像头”+currentCameraId);
    试一试{
    if(ActivityCompat.checkSelfPermission(context、Manifest.permission.CAMERA)
    ==已授予PackageManager.PERMISSION\u权限
    &&ActivityCompat.checkSelfPermission(上下文,
    清单.权限.写入(外部存储)
    ==PackageManager.权限(已授予){
    manager.openCamera(currentCameraId,stateCallback,null);
    }
    }捕捉(最终摄影机){
    Log.e(标记“打开摄像头时发生异常”+currentCameraId,e);
    }
    }
    private final CameraCaptureSession.CaptureCallback captureListener=新建CameraCaptureSession
    .CaptureCallback()文件{
    @凌驾
    public void onCaptureCompleted(@NonNull CameraCaptureSession会话,@NonNull
    捕获请求请求,
    @非Null TotalCaptureResult(结果){
    super.onCaptureCompleted(会话、请求、结果);
    if(picturesTaken.lastEntry()!=null){
    capturingListener.onCaptureDone(picturesTaken.lastEntry().getKey(),picturesTaken
    .lastEntry().getValue());
    Log.i(标记“完成从照相机拍照”+cameraDevice.getId());
    }
    关闭摄像头();
    }
    };
    专用最终ImageReader.OnImageAvailableListener OnImageAvailableListener=(ImageReader
    imReader)->{
    最终图像=imReader.acquiredlatestimage();
    final ByteBuffer buffer=image.getPlanes()[0].getBuffer();
    最终字节[]字节=新字节[buffer.capacity()];
    buffer.get(字节);
    saveImageToDisk(字节、时间戳);
    image.close();
    };
    私有最终CameraDevice.StateCallback StateCallback=新CameraDevice.StateCallback(){
    @凌驾
    打开公共无效(@NonNull CameraDevice camera){
    cameraClosed=假;
    Log.d(标记“camera”+camera.getId()+“opened”);
    cameraDevice=摄像机;
    Log.i(标记“从照相机拍照”+camera.getId());
    //延迟一段时间后再拍照。这样可以解决拍摄黑色照片的问题。
    新处理程序().postDelayed(()->{
    试一试{
    拍摄照片();
    
    /**
     * The aim of this service is to secretly take pictures (without preview or opening device's
     * camera app)
     * from all available cameras using Android Camera 2 API
     *
     * @author hzitoun (zitoun.hamed@gmail.com)
     */
    
    @TargetApi(Build.VERSION_CODES.LOLLIPOP) //NOTE: camera 2 api was added in API level 21
    public class PictureCapturingServiceImpl extends APictureCapturingService {
    
        private static final String TAG = PictureCapturingServiceImpl.class.getSimpleName();
    
        private CameraDevice cameraDevice;
        private ImageReader imageReader;
        /***
         * camera ids queue.
         */
        private Queue<String> cameraIds;
    
        private String currentCameraId;
        private boolean cameraClosed;
        /**
         * stores a sorted map of (pictureUrlOnDisk, PictureData).
         */
        private TreeMap<String, byte[]> picturesTaken;
        private PictureCapturingListener capturingListener;
    
        /***
         * private constructor, meant to force the use of {@link #getInstance}  method
         */
        private PictureCapturingServiceImpl(final Activity activity) {
            super(activity);
        }
    
        /**
         * @param activity the activity used to get the app's context and the display manager
         * @return a new instance
         */
        public static APictureCapturingService getInstance(final Activity activity) {
            return new PictureCapturingServiceImpl(activity);
        }
    
        /**
         * Starts pictures capturing treatment.
         *
         * @param listener picture capturing listener
         */
        @Override
        public void startCapturing(final PictureCapturingListener listener) {
            this.picturesTaken = new TreeMap<>();
            this.capturingListener = listener;
            this.cameraIds = new LinkedList<>();
            try {
                final String[] cameraIds = manager.getCameraIdList();
                System.out.println("cameraIds length: " + cameraIds.length);
                System.out.println("cameraId[0]: " + cameraIds[0]);
                System.out.println("cameraId[1]: " + cameraIds[1]);
                if (cameraIds.length > 0) {
                    this.cameraIds.addAll(Arrays.asList(cameraIds));
                    // a currentCameraId lesz a cameraIds első eleme, de a caneraIds-ból remove-olva
                    // lesz
                    // ez az első elem
                    this.currentCameraId = this.cameraIds.poll();
                    openCamera();
                } else {
                    //No camera detected!
                    capturingListener.onDoneCapturingAllPhotos(picturesTaken);
                }
            } catch (final CameraAccessException e) {
                Log.e(TAG, "Exception occurred while accessing the list of cameras", e);
            }
        }
    
    
        private void openCamera() {
            Log.d(TAG, "opening camera " + currentCameraId);
            try {
                if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
                        == PackageManager.PERMISSION_GRANTED
                        && ActivityCompat.checkSelfPermission(context,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        == PackageManager.PERMISSION_GRANTED) {
                    manager.openCamera(currentCameraId, stateCallback, null);
                }
            } catch (final CameraAccessException e) {
                Log.e(TAG, " exception occurred while opening camera " + currentCameraId, e);
            }
        }
    
    
        private final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession
                .CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull
                    CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {
                super.onCaptureCompleted(session, request, result);
                if (picturesTaken.lastEntry() != null) {
                    capturingListener.onCaptureDone(picturesTaken.lastEntry().getKey(), picturesTaken
                            .lastEntry().getValue());
                    Log.i(TAG, "done taking picture from camera " + cameraDevice.getId());
                }
                closeCamera();
            }
        };
    
    
        private final ImageReader.OnImageAvailableListener onImageAvailableListener = (ImageReader
                                                                                               imReader) -> {
            final Image image = imReader.acquireLatestImage();
            final ByteBuffer buffer = image.getPlanes()[0].getBuffer();
            final byte[] bytes = new byte[buffer.capacity()];
            buffer.get(bytes);
            saveImageToDisk(bytes, timeStamp);
            image.close();
        };
    
    
        private final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
            @Override
            public void onOpened(@NonNull CameraDevice camera) {
                cameraClosed = false;
                Log.d(TAG, "camera " + camera.getId() + " opened");
                cameraDevice = camera;
                Log.i(TAG, "Taking picture from camera " + camera.getId());
                //Take the picture after some delay. It may resolve getting a black dark photos.
                new Handler().postDelayed(() -> {
                    try {
                        takePicture();
                    } catch (final CameraAccessException e) {
                        Log.e(TAG, " exception occurred while taking picture from " +
                                currentCameraId, e);
                    }
                }, 500);
            }
    
    
            @Override
            public void onDisconnected(@NonNull CameraDevice camera) {
                Log.d(TAG, " camera " + camera.getId() + " disconnected");
                if (cameraDevice != null && !cameraClosed) {
                    cameraClosed = true;
                    cameraDevice.close();
                }
            }
    
    
            @Override
            public void onClosed(@NonNull CameraDevice camera) {
                cameraClosed = true;
                Log.d(TAG, "camera " + camera.getId() + " closed");
                //once the current camera has been closed, start taking another picture
                //if (!cameraIds.isEmpty()) {
                if (cameraIds.size() != 1 && !cameraIds.isEmpty()) {
                    takeAnotherPicture();
                } else {
                    capturingListener.onDoneCapturingAllPhotos(picturesTaken);
                }
            }
    
    
            @Override
            public void onError(@NonNull CameraDevice camera, int error) {
                Log.e(TAG, "camera in error, int code " + error);
                if (cameraDevice != null && !cameraClosed) {
                    cameraDevice.close();
                }
            }
        };
    
    
        private void takePicture() throws CameraAccessException {
            if (null == cameraDevice) {
                Log.e(TAG, "cameraDevice is null");
                return;
            }
            final CameraCharacteristics characteristics = manager.getCameraCharacteristics
                    (cameraDevice.getId());
            Size[] jpegSizes = null;
            StreamConfigurationMap streamConfigurationMap = characteristics.get(CameraCharacteristics
                    .SCALER_STREAM_CONFIGURATION_MAP);
            if (streamConfigurationMap != null) {
                jpegSizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG);
            }
            final boolean jpegSizesNotEmpty = jpegSizes != null && 0 < jpegSizes.length;
            int width = jpegSizesNotEmpty ? jpegSizes[0].getWidth() : 640;
            int height = jpegSizesNotEmpty ? jpegSizes[0].getHeight() : 480;
            final ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
            final List<Surface> outputSurfaces = new ArrayList<>();
            outputSurfaces.add(reader.getSurface());
            final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest
                    (CameraDevice.TEMPLATE_STILL_CAPTURE);
            captureBuilder.addTarget(reader.getSurface());
            captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
            captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation());
            reader.setOnImageAvailableListener(onImageAvailableListener, null);
            cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
                        @Override
                        public void onConfigured(@NonNull CameraCaptureSession session) {
                            try {
                                session.capture(captureBuilder.build(), captureListener, null);
                            } catch (final CameraAccessException e) {
                                Log.e(TAG, " exception occurred while accessing " + currentCameraId, e);
                            }
                        }
    
                        @Override
                        public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                        }
                    }
                    , null);
        }
    
        //cYou - átírva a képek mentési helye a cyou mappába 240. sor
        private void saveImageToDisk(final byte[] bytes, String timeStamp) {
            final String cameraId = this.cameraDevice == null ? UUID.randomUUID().toString() : this
                    .cameraDevice.getId();
            final File file = new File(Environment.getExternalStorageDirectory() + "/mup/" +
                    Sta.getCurrentTimeStamp() + "_pic.jpg");
            try (final OutputStream output = new FileOutputStream(file)) {
                output.write(bytes);
                this.picturesTaken.put(file.getPath(), bytes);
            } catch (final IOException e) {
                Log.e(TAG, "Exception occurred while saving picture to external storage ", e);
            }
        }
    
        private void takeAnotherPicture() {
            this.currentCameraId = this.cameraIds.poll();
            openCamera();
        }
    
        private void closeCamera() {
            Log.d(TAG, "closing camera " + cameraDevice.getId());
            if (null != cameraDevice && !cameraClosed) {
                cameraDevice.close();
                cameraDevice = null;
            }
            if (null != imageReader) {
                imageReader.close();
                imageReader = null;
            }
        }
    
    APictureCapturingService() {
        this.manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    }