android上的设备特定屏幕捕获
Posted
技术标签:
【中文标题】android上的设备特定屏幕捕获【英文标题】:Device specific screen capturing on android 【发布时间】:2013-01-09 16:46:46 【问题描述】:我们需要找到一种在不使用任何外部软件的情况下捕获 android 屏幕的方法,该方法可以在非 root 手机上运行。
我的研究表明没有办法做到这一点。无论如何,您应该拥有 root 权限,才能捕获设备的屏幕。
然而,进一步的研究表明,有一种方法可以让有限数量的设备做到这一点,而无需拥有 root 权限。作为证明,我可以在 Android 市场上推出以下应用程序:Screenshot UX。
它声称,该应用不需要root权限即可在以下设备上捕获屏幕:
银河系列(S,S2,...) HTC 手机(Sensation,...) 摩托罗拉(Atrix,...)。 LG Optimus 系列(G2X,...)有人说,Tegra 设备也支持这一点。
谁能指出一些文档,至少在特定设备上,这样我们至少可以支持 HTC 手机。
编辑:现在我们正在尝试使用“/system/bin/screencap”,但在模拟器上没有成功。 是否可以在某些设备上截屏仅意味着它们允许使用“/system/bin/screencap”或直接从 /dev/graphics/fb0 读取?
或者他们提供了一些用于截屏的 API?
谢谢。
【问题讨论】:
其中一些设备具有系统或图形供应商留下的不安全命令行工具,可在 Google 的原始原始帧缓冲方法与硬件不兼容且其较新方法尚不兼容的情况下启用 DDMS 屏幕截图实施的。这样的工具可能会因名称或组所有权和粘性位而脱颖而出;但如果它在此类安全参数中不特殊,则可能表示您可以从自己的代码中进行逆向工程和利用的未记录且不安全的 API。 那么我们可以测试它吗?我的意思是一些示例、指南等。我们在列表中有一些设备,我们可以在这些设备上运行测试。 如果您没有能力进行自己的调查,那么您不应该尝试基于临时的、特定于设备的怪异的业务领域。即使您是,这也是一个非常不稳定的想法,因为这些手机将过时并在市场上被更好地锁定的手机取代,或者至少有不同的错误,您必须识别和利用。 克里斯,你能回答一下编辑过的版本吗?我们了解,为该设备编写应用程序的风险,我们也了解,该设备中提供的功能可能会被锁定或给产品带来很多错误。然而,我们需要这样做。在这个问题中,我已经写了做了什么调查,所以我认为我们有能力进行自己的调查。 您需要自己调查我为感兴趣的每个设备描述的可能性,因为这完全是关于不同硬件版本的独特方法,可能其中没有一个与模拟器充分匹配。如果您打算在 Android 开发的“不推荐”领域进行操作,您需要准备好自己查看设备的详细程度,而不是期望在网上找到答案。 【参考方案1】:截屏是 android 上一个古老且被广泛讨论的话题。 在过去几年中,开发了几个主要选项:
在 root 设备上运行 screencap,但你已经知道了。
运行屏幕截图并使用系统证书为您的应用程序签名:
有一个权限 READ_FRAME_BUFFER 但只有当您的应用程序被签名为系统应用程序时才能获得它。
-
使用各种 ADB 技巧,但其中大多数使用屏幕截图,并且 AFAIK 要求您将设备连接到 PC。
But Since Android 5 things have changed.
Android 5.0 允许您添加屏幕捕获和屏幕共享 使用新的 android.media.projection API 为您的应用提供功能。 此功能很有用,例如,如果您想启用 视频会议应用中的屏幕共享。
新的 createVirtualDisplay() 方法允许您的应用捕获 将主屏幕(默认显示)的内容放入 Surface 对象,然后您的应用可以通过网络发送该对象。仅限 API 允许捕获非安全的屏幕内容,而不是系统音频。到 开始屏幕捕获,您的应用必须首先请求用户的 通过使用 Intent 启动屏幕捕获对话框来获得许可 通过createScreenCaptureIntent()方法获取。
您提到的设备已经很旧了,我怀疑他们是否获得了 android 5 的官方更新,这给您留下了第二个选择。
【讨论】:
以上是关于android上的设备特定屏幕捕获的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用相机意图捕获的图像会在 Android 上的某些设备上旋转?