谢力王
谢力王
  • 发布:2022-05-23 10:57
  • 更新:2022-05-24 09:29
  • 阅读:554

安卓录制屏幕插件,获取不了MediaProjection

分类:uni-app

开发安卓原生录屏插件(module),

代码:
Activity activity = (Activity) super.mWXSDKInstance.getContext();
MediaProjectionManager projectionManager = (MediaProjectionManager) activity.getSystemService(Activity.MEDIA_PROJECTION_SERVICE);
MediaProjection mediaProjection = projectionManager.getMediaProjection(resultCode, data);

getMediaProjection()函数没执行,获取不到mediaProjection

2022-05-23 10:57 负责人:无 分享
已邀请:
FullStack

FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866

谢力王

谢力王 (作者)

技术员没人回复我吗

谢力王

谢力王 (作者)

问题已解决,安卓和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

  • a***@163.com

    哥,为毛我在unimodule类下的方法里的(Activity) super.mWXSDKInstance这个属性是null啊

    2022-09-09 16:51

要回复问题请先登录注册