Record screen Android 11 using MediaRecorder - file is created but not able to record video

Viewed 368

I am creating a screen recording application when I am recording screen using MediaRecorder class in android, application working fine if below Android 10 but not working in Android 11

when I start recording using mediarecord.start() method it is creating file but the file size is always 3.23 kb, so I am assuming the file is not updating when recording screen please check below code

Thanks in advance

private void startProjection(int resultCode, Intent data) throws FileNotFoundException {
        MediaProjectionManager mpManager =
                (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
        if (mediaProjection == null) {
            mediaProjection = mpManager.getMediaProjection(resultCode, data);
            if (mediaProjection != null) {
                density = Resources.getSystem().getDisplayMetrics().densityDpi;

                if (mediaRecorder == null) {
                    mediaRecorder = new MediaRecorder();
                }

                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
                mediaRecorder.setVideoEncodingBitRate(10000000);
                mediaRecorder.setVideoFrameRate(30);
                mediaRecorder.setVideoSize(Resources.getSystem().getDisplayMetrics().widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels);
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
                    mediaRecorder.setOutputFile(getFilePath());
                } else {
                    mediaRecorder.setOutputFile(getFilePath());
                }
                try {
                    mediaRecorder.prepare();
                    mediaRecorder.start();
                    //ScreenCaptureReceiver.getInstance().registerIntent(getApplicationContext(), filename, true);
                } catch (IllegalStateException | IOException e) {
                    //Log.d("milasdfjhsdf", e.getMessage());
                    e.printStackTrace();
                }
                createVirtualDisplay();
                mediaProjection.registerCallback(new MediaProjectionStopCallback(), handler);
                new SecurePreferences(getApplicationContext()).setFilePath(filename);
            }
        }
    }

private String getFilePath() {
        filename = getExternalCacheDir().getAbsolutePath();
        filename += "/audiorecordtest.mp4";
        return filename;
    }
@SuppressLint("WrongConstant")
    private void createVirtualDisplay() {
        int width = Resources.getSystem().getDisplayMetrics().widthPixels;
        int height = Resources.getSystem().getDisplayMetrics().heightPixels;
        virtualDisplay = mediaProjection.createVirtualDisplay(ScreenshotConstant.REDPEN_CAPTURE, width, height,
                density, getVirtualDisplayFlags(), mediaRecorder.getSurface(), null, handler);
    }

enter image description here

0 Answers
Related