Android captureScreen 截屏问题,求助!!!

Ron_Tang 2012-11-14 05:11:04
大家好,我看了这篇 http://blog.csdn.net/zmyde2010/article/details/6925498 博文之后,想要在android4.0.3系统也实现用android源码截屏。我下载android源码,编译,并单独编译jni模块。编译成功了,但是运行时出错,Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)。通过无穷无尽的查资料,发现此问题有可能是想库文件的函数中传递空指针造成的。顺着这个思路研究,看log发现是在cpp文件中调用完composer->captureScreen函数后发现其返回值为NO_ERROR,但是heap却是null,w和h都是0,所以到后面调用heap->getBase()时出错,想请教下是什么原因导致调用有问题?我该如何解决。谢谢!!~~~~~~
...全文
694 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
leif2006 2013-07-23
  • 打赏
  • 举报
回复
我的 status_t err = composer->captureScreen(0, &heap, &w, &h, &f, 0, 0);这个没有走进去啊 可是后边 printf("screen capture success: w=%u, h=%u, pixels=%p\n",这个log打出来的值是有的 但是t卡上没有生成图片 请问是为什么啊?
Ron_Tang 2012-11-24
  • 打赏
  • 举报
回复
那个so文件问题,有可能是函数名或是参数有些问题,不过你已经解决了哈哈 恭喜呀
Ron_Tang 2012-11-24
  • 打赏
  • 举报
回复
你先别把它写成so文件 ,先写成可执行文件,手机root后 在java代码中用Runtime.getRuntime.exec("su") 获取输出流 执行程序文件,看看能否成功运行captureScreen()函数 。 目前,通过lib方式调用captureScreen函数 都是 用平台签名来解决的 使apk有了读取framebuffer权限,但是这方法没有可移植性,只能在自己的手机上用。 具体方法我也正在研究中,可以慢慢交流
licongf18 2012-11-23
  • 打赏
  • 举报
回复
引用 2 楼 zjq2008wd 的回复:
呵呵,谢谢,这个问题我之前知道了,不是由于这个原因引起的。最后我发现还是权限的问题。并无提示权限不足,但是执行函数时返回null。。。
楼主你好,经过一通弄后,我跟你碰到一模一样的问题,“并无提示权限不足,但是执行函数时返回null。。。”。这个你是怎么解决的啊,请问
licongf18 2012-11-23
  • 打赏
  • 举报
回复
引用 2 楼 zjq2008wd 的回复:
呵呵,谢谢,这个问题我之前知道了,不是由于这个原因引起的。最后我发现还是权限的问题。并无提示权限不足,但是执行函数时返回null。。。
楼主好,我编译能通过,但是加载.so的时候发生了Ljava/lang/UnsatisfiedLinkError, 但是我把截屏函数中的代码换成别的就能正常加载.SO并正确执行。不知道楼主碰没碰到过此问题?
fhhdg 2012-11-19
  • 打赏
  • 举报
回复
4.03接口已经不是原来的接口了 const char *file_path = env->GetStringUTFChars(file, NULL); const String16 name("SurfaceFlinger"); sp<ISurfaceComposer> composer; getService(name, &composer); sp<IMemoryHeap> heap; uint32_t w, h; PixelFormat f; status_t err = composer->captureScreen(0, &heap, &w, &h, &f, 0, 0,0,INT_MAX); if (err != NO_ERROR) { LOGE("screen capture failed: %s\n", strerror(-err)); exit(0); } LOGD("screen capture success: w=%u, h=%u, pixels=%p\n", w, h, heap->getBase()); LOGD("saving file as PNG in %s ...\n", file_path); SkBitmap b; b.setConfig(SkBitmap::kARGB_8888_Config, w, h); b.setPixels(heap->getBase()); SkImageEncoder::EncodeFile(file_path, b, SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality);
Ron_Tang 2012-11-19
  • 打赏
  • 举报
回复
呵呵,谢谢,这个问题我之前知道了,不是由于这个原因引起的。最后我发现还是权限的问题。并无提示权限不足,但是执行函数时返回null。。。

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧