我开发了一个ScreenshotClient
用于捕获设备屏幕的本机进程(仅限有根设备)
我有一个循环,ScreenshotClient
每个update()
循环都在其中。在 4.3 之前一切正常。当我在 4.3 上运行它时,第一次调用 update 成功,但在第二次调用中,调用结果是 -2 ,我在 logcat 中收到这些错误:
E/BufferQueue( 8166): [ScreenshotClient] connect: already connected (cur=1,req=1)
E/libEGL ( 2463): EGLNativeWindowType 0x4116d5f8 already connected to another API
E/libEGL ( 2463): eglCreateWindowSurface:376 error 300b (EGL_BAD_NATIVE_WINDOW)
E/SurfaceFlinger( 2463): captureScreenImplLocked: eglCreateWindowSurface() failed 0x300b
知道导致此问题的 4.3 中发生了什么变化,或者这些错误意味着什么。
我的代码大致如下:
int main(int argc, char** argv) {
ProcessState::self()->startThreadPool();
sp < IBinder > display = SurfaceComposerClient::getBuiltInDisplay(
DEFAULT_DISPLAY_ID);
ScreenshotClient client;
while (true) {
client.update(display);
pixels = screenshot.getPixels();
// do something with the data
}
}