2011-12-26 163 views
6

我正在研究Android上的应用程序,它将共享屏幕到另一个Android设备。此应用程序将作为服务在后台运行。以当前屏幕的屏幕截图

我想要捕捉屏幕(当前屏幕),将其保存为JPEG,并通过UDP连续发送到其他Android设备。

但我的问题是如何捕捉帧缓冲区捕捉当前屏幕。

请帮忙。

回答

3

您可以通过启用

setDrawingCacheEnabled(true); 
视图

采取布局的屏幕截图。

检查此link

+0

谢谢。但是,这只会给我的应用程序视图的屏幕截图。我想捕获当我的应用程序在后台运行时出现在屏幕上的任何内容 – user1095154 2011-12-26 09:39:42

+0

你想要的背景服务的屏幕截图...我不知道...希望有人会帮助你 – 2011-12-26 11:58:03

7

Android的帧缓冲器(和其它Linux系统)通过打开的/ dev /图形/ FB0设备访问。这需要root用户访问权,即使拥有root权限,它也不能在所有设备上正常工作。大多数设备使用一对帧缓冲器并在它们之间切换。更大的问题是,即使使用扎根电话,Dalvik机器的用户ID也无权访问帧缓冲区(fb0)设备。这意味着您将永远无法直接从Java代码打开和读取fb0设备。您将需要以root身份运行本地Linux应用程序,并且它将能够访问fb0(在用户授予权限后)。我成功地完成了这项工作,这是相当具有挑战性的,也让Google不满。我仍然可能会将其转化为商业应用,但限制和不兼容性可能性很低。

+0

嗨BitBank,谢谢你的回复。 – user1095154 2012-01-16 11:44:57

+1

我使用链接http://www.pocketmagic.net/?p=1473访问帧缓冲区。但是当我使用相同的代码使用服务进行连续的屏幕截图时,我会遇到内存问题。但是当我使用一个活动捕捉单个屏幕时,则没有内存错误。你可以帮助 – user1095154 2012-01-16 11:45:29

+0

你是否映射和取消映射framebuffer内存,或者你保持一个指针并多次使用它?通过在使用fb0时保持fb0打开状态,我能够持续捕捉屏幕。 – BitBank 2012-01-16 15:40:38