目前实现的都录制主屏幕的功能,怎么实现录制第二块屏幕显示的内容呢? 副屏就是通过Presentation来实现的Android双屏异显,HDMI连接
3条回答 默认 最新
Leodong. 2023-12-01 10:26关注该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
要实现Android录制副屏内容,可以使用MediaProjection API。以下是一个简单的示例:1、 首先,需要在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.screen.mirror" /> <uses-feature android:name="android.hardware.screen.content" /> <uses-feature android:name="android.hardware.screen.windowing" />2、 然后,创建一个名为
ScreenRecorder的类,继承自MediaProjectionManager.Callback:import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager; import android.os.Bundle; import android.view.Surface; import android.view.WindowManager; public class ScreenRecorder extends MediaProjectionManager.Callback { private MediaProjectionManager mediaProjectionManager; private MediaProjection mediaProjection; private VirtualDisplay virtualDisplay; private Surface surface; public ScreenRecorder(MediaProjectionManager mediaProjectionManager) { this.mediaProjectionManager = mediaProjectionManager; } public void startRecording() { // 请求屏幕录制权限 if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); return; } // 获取屏幕尺寸和密度信息 DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); Display display = displayManager.getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); float density = display.getDensity; // 创建虚拟显示 virtualDisplay = mediaProjectionManager.createVirtualDisplay("ScreenRecorder", width, height, density, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, null, this); // 创建Surface并设置到虚拟显示上 surface = new Surface(virtualDisplay); // 开始屏幕录制 mediaProjection.start(); } public void stopRecording() { // 停止屏幕录制 if (mediaProjection != null) { mediaProjection.stop(); } // 销毁虚拟显示 if (virtualDisplay != null) { virtualDisplay.release(); virtualDisplay = null; } // 销毁Surface if (surface != null) { surface.release(); surface = null; } } @Override public void onRequestError(int errorCode, MediaProjection mediaProjection) { // 处理错误情况 } @Override public void onStop() { // 停止录制时调用 } @Override public void onStart() { // 开始录制时调用 } }3、 在需要录制屏幕的地方,创建一个
ScreenRecorder实例,并调用startRecording()方法开始录制:ScreenRecorder screenRecorder = new ScreenRecorder(mediaProjectionManager); screenRecorder.startRecording();4、 当不再需要录制屏幕时,调用
stopRecording()方法停止录制:screenRecorder.stopRecording();注意:这个示例仅适用于Android 6.0(API级别23)及更高版本。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
解决 无用评论 打赏 举报