Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.display.VirtualDisplay android.media.projection.MediaProjection.createVirtualDisplay(java.lang.String, int, int, int, int, android.view.Surface, android.hardware.display.VirtualDisplay$Callback, android.os.Handler)' on a null object reference
时间: 2023-10-09 07:13:37 浏览: 382
Tess, if broken it is fix it you should
这个错误是因为你在调用 `createVirtualDisplay` 方法时,`MediaProjection` 对象为空,即为 null。你需要先通过 `MediaProjectionManager` 获取到 `MediaProjection` 对象,然后再调用 `createVirtualDisplay` 方法。代码示例:
```
// 获取 MediaProjectionManager 对象
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
// 通过 MediaProjectionManager 获取 MediaProjection 对象
MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
// 创建 VirtualDisplay
VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay(
"VirtualDisplay",
screenWidth,
screenHeight,
screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
surface,
null,
null
);
```
注意,在调用 `getMediaProjection` 方法时,需要传入 `resultCode` 和 `data` 参数。这两个参数是从 `onActivityResult` 方法中获取到的。如果你还没有实现 `onActivityResult` 方法,那么可以参考以下代码示例:
```
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK && data != null) {
// 获取到屏幕捕捉的结果,进行相关操作
}
}
```
在上面的代码中,`REQUEST_CODE_SCREEN_CAPTURE` 是你自己定义的请求码,用来标识屏幕捕捉的操作。当用户授权屏幕捕捉权限后,系统会回调 `onActivityResult` 方法,你可以在该方法中获取到 `resultCode` 和 `data` 参数,然后通过 `MediaProjectionManager` 获取 `MediaProjection` 对象。
阅读全文