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