问题已解决,安卓和ios版本的录屏功能均已实现(简单版),安卓复杂点,以下几点是关键:
// Android10.0以上的录制屏幕需要获取到FOREGROUND_SERVICE权限
// Android10.0以上实例化mediaProjection需要在service里进行
// Android10.0以上录制屏幕需要添加notification,提醒用户该app正在录制屏幕
1.配置指引
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<service
android:name="xxx.xxx.ScreenRecordService" (extends Service)
android:enabled="true"
android:foregroundServiceType="mediaProjection">
</service>
2.代码指引:
1)UniModule类的@UniJSMethod(uiThread = true)
activity = (Activity) super.mWXSDKInstance.getContext();
projectionManager = (MediaProjectionManager) activity.getSystemService(Activity.MEDIA_PROJECTION_SERVICE);
captureIntent = projectionManager.createScreenCaptureIntent();
activity.startActivityForResult(captureIntent, recordScreenRequestCode);
2)UniModule类的onActivityResult
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent service = new Intent(activity, ScreenRecordService.class);
service.putExtra("code", resultCode);
service.putExtra("data", data);
activity.startForegroundService(service);
}
3)ScreenRecordService类的onStartCommand
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel(); //创建通知栏,你正在录屏
int mResultCode = intent.getIntExtra("code", -1);
Intent mResultData = intent.getParcelableExtra("data");
MediaProjection mMediaProjection = EasyScreenRecorder.projectionManager.getMediaProjection(mResultCode, Objects.requireNonNull(mResultData));
之后就是初始化MediaRecorder、VirtualDisplay
}
IOS版参考这个即可 https://blog.csdn.net/CXLiao/article/details/123197749