Подтвердить что ты не робот

Открыть/Запустить камеру из фоновой службы в android

Хотите создать приложение, которое сохраняет запись в фоновом режиме, возможно ли это?

4b9b3361

Ответ 1

да, это очень хорошо.

Создайте действие, которое запустит фоновое обслуживание на каком-либо мероприятии, или вы также можете использовать диспетчер аварийных сигналов для запуска и остановки службы в соответствии с вашими требованиями.

Посмотрите на какой-то грубый код, который начнет и остановит запись с помощью камеры, вы можете позвонить из своего фонового сервиса и будете работать плавно.

    public boolean starMediaRecording(){
            Camera.Parameters params = mServiceCamera.getParameters();
            mServiceCamera.setParameters(params);
            Camera.Parameters p = mServiceCamera.getParameters();

            final List<Size> listSize = p.getSupportedPreviewSizes();
            Size mPreviewSize = listSize.get(2);
            p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
            p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
            mServiceCamera.setParameters(p);

            try {
                mServiceCamera.setPreviewDisplay(mSurfaceHolder);
                mServiceCamera.startPreview();
            }
            catch (IOException e) {
                Log.e(TAG, e.getMessage());
                e.printStackTrace();
            }

            mServiceCamera.unlock();

            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.setCamera(mServiceCamera);
            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
            mMediaRecorder.setOutputFile("/sdcard/filenamevideo.mp4");
            mMediaRecorder.setVideoFrameRate(30);
            mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
            mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

            mMediaRecorder.prepare();
            mMediaRecorder.start(); 

            mRecordingStatus = true;

            return true;

    }

    public void stopMediaRecorder() {
        mServiceCamera.reconnect();

        mMediaRecorder.stop();
        mMediaRecorder.reset();

        mServiceCamera.stopPreview();
        mMediaRecorder.release();

        mServiceCamera.release();
        mServiceCamera = null;
    }
}

Это пример кода, вам нужно добавить свою собственную логику и соответственно обрабатывать исключения.