안드로이드 개발 질문/답변
(글 수 45,052)
혹시 mobizen 이라고 어플을 아시는지..
그 어플은 루트 권한 없이도 화면을 공유 할 수가 있는데
JNI 통해서 framebuffer를 읽으려 해도 permission denied가 됩니다ㅠ
혹시 루트권한 없이 framebuffer를 받아올 수 있는 방법을 아시는분 계신가요..??
2012.11.12 02:30:46
http://www.kandroid.org/board/board.php?board=AndroidTechQnA&command=body&no=4496
ICS 참고
/frameworks/base/cmds/screencap/screencap.cpp
ScreenshotClient screenshot; 134 if (screenshot.update() == NO_ERROR) { 135 base = screenshot.getPixels(); 136 w = screenshot.getWidth(); 137 h = screenshot.getHeight(); 138 f = screenshot.getFormat(); 139 size = screenshot.getSize(); 140 } 546status_t ScreenshotClient::update() { 547 sp<ISurfaceComposer> s(ComposerService::getComposerService()); 548 if (s == NULL) return NO_INIT; 549 mHeap = 0; 550 return s->captureScreen(0, &mHeap, 551 &mWidth, &mHeight, &mFormat, 0, 0, 552 0, -1UL); 553} <ISurfaceComposer> 104 virtual status_t captureScreen(DisplayID dpy, 105 sp<IMemoryHeap>* heap, 106 uint32_t* width, uint32_t* height, PixelFormat* format, 107 uint32_t reqWidth, uint32_t reqHeight, 108 uint32_t minLayerZ, uint32_t maxLayerZ) 109 { 110 Parcel data, reply; 111 data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 112 data.writeInt32(dpy); 113 data.writeInt32(reqWidth); 114 data.writeInt32(reqHeight); 115 data.writeInt32(minLayerZ); 116 data.writeInt32(maxLayerZ); 117 remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN, data, &reply); 118 *heap = interface_cast<IMemoryHeap>(reply.readStrongBinder()); 119 *width = reply.readInt32(); 120 *height = reply.readInt32(); 121 *format = reply.readInt32(); 122 return reply.readInt32(); 123 }




없습니다.