获取当前屏幕截图

6

我正在开发一款Android应用程序,该程序可以将屏幕共享到另一个Android设备上。此应用将作为服务在后台运行。

我想捕获屏幕(当前屏幕),将其保存为JPEG格式,并不断通过UDP发送到其他Android设备。

但我的问题是如何通过捕获帧缓冲区来捕获当前屏幕。

请帮忙解决。

2个回答

7

Android framebuffer(以及其他Linux系统)可以通过打开/dev/graphics/fb0设备来访问。这需要root权限,即使拥有root权限,也不能在所有设备上正常工作。大多数设备使用一对framebuffer并在它们之间切换。更大的问题是,即使有了root权限,Dalvik机器的用户ID也没有权限访问帧缓冲区(fb0)设备。这意味着你将永远无法直接从Java代码中打开和读取fb0设备。你需要运行一个原生的Linux应用程序作为root,并获得用户的允许才能访问fb0。我成功地做到了这一点,虽然这相当具有挑战性,但谷歌并不赞成。我仍然可能把它变成商业应用程序,但是限制和不兼容性降低了概率。


1
我使用链接http://www.pocketmagic.net/?p=1473来访问帧缓冲区。但是当我使用连续截图的服务时,使用相同的代码会出现内存问题。但是当我使用活动捕获单个屏幕时,就没有内存错误。你能帮忙吗? - user1095154
你是在映射和取消映射帧缓冲内存,还是保留一个指针并多次使用它?我能够通过保持fb0打开并在使用时连续捕获屏幕。 - BitBank
我正在使用指针。你能分享一下代码吗?我正在使用与我之前提到的链接中提到的相同的过程pocketmagic.net/?p=1473。 - user1095154
我宁愿不分享这段代码,因为我可能会在商业应用中使用它。 - BitBank

3
您可以通过启用“截屏”功能来获取布局的截图。
setDrawingCacheEnabled(true);

查看此链接

of the view.


1
谢谢。但这只会给出我的应用程序视图的截图。我想在我的应用程序后台运行时捕获屏幕上出现的所有内容。 - user1095154
你想要后台服务的截图...我不知道...希望有人能帮助你。 - droid kid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接