Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open/Run Camera from background service in android

Tags:

android

Want to build an app which keeps recording in background, is it possible ?

like image 725
DraD Avatar asked Feb 20 '13 09:02

DraD


People also ask

Can I run camera in background on Android?

Open the Google Play Store app and search for the Record Video Background app. Install the app and open it. Provide the necessary access privileges to the app. Tap on the Record button in the center to start recording the video in the background even if the screen is turned off.

Can camera app run in background?

On Android 9 (API level 28) and later, apps running in the background cannot access the camera . Therefore, you should use the camera either when your app is in the foreground or as part of a foreground service .

How do I run background services on Android?

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml. In the above code, we have taken text view, when user click on text view, it will start service and stop service.


1 Answers

yes its very well possible.

Create an activity which will start your background service on some event or you can also use alarm manager to start and stop the service as per your requirement.

Check some rough code which will start & stop recording using camera, this you can call from your background service and will work smoothly.

    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;
    }
}

This is sample code, you need to add your own logic around and also handle exceptions accordingly.

like image 172
Pawan Maheshwari Avatar answered Oct 08 '22 23:10

Pawan Maheshwari