如何以编程方式在Android手机上执行屏幕捕获?捕获android屏幕
回答
由于您无权访问framebuffer设备,因此您无法从android应用程序执行此操作,除了根目录手机之外。
但是,您可以在开发机器的DDMS窗口中通过adb执行此操作,因为adb在具有framebuffer权限的图形组中运行。
如果您想在根设备上的本地代码中执行类似的操作,请查看adb守护程序的源代码。
编辑:它似乎可能会改变,并且在最近的android版本中可能有非root权能,但我不确定细节。
下面是如何将视图转换为位图的示例。只要抓住你的顶级观点,并拥有它。这绝对有效,绝对不需要为此拥有根植设备!
http://www.brighthub.com/mobile/google-android/articles/30676.aspx
这是捕捉视图,而不是屏幕本身。出于某些目的,它可能是足够的并因此有用。但开发人员社区中众所周知,您无法从安全设备上的应用程序中捕获实际的屏幕缓冲区。 – 2011-03-03 15:41:35
我认为就这个问题而言,向他提供关于如何获取父视图(针对所有意图和目的是屏幕缓冲区)的建议就足够了。所以,你在技术上是正确的,但我认为他根本不会完美地表达他的问题。他想要什么(我认为)只是简单地对屏幕上显示的任何内容进行位图屏幕抓取,这既不重要,也不需要root权限。 – 2011-03-03 17:17:00
我的怀疑是他想要捕获另一个应用程序的屏幕。如果是他自己的应用程序,使用内置于DDMS中的屏幕截图速度最快 - 无需编写单行代码。如果他需要发布具有内置功能的应用程序以在用户设备上捕获其自己UI的本质,那么您的建议将非常有用。 – 2011-03-03 17:48:58
尝试这样的事:
View v1=childView.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm=v1.getDrawingCache();
if(bm!=null){
//save the file
}
- 1. 在Android的屏幕捕获
- 2. 屏幕捕获的代码屏幕捕获Android的任何屏幕
- 3. 捕获屏幕
- 4. 捕获屏幕
- 5. PowerShell屏幕捕获
- 6. windows屏幕捕获
- 7. 屏幕捕获API
- 8. HTML5捕获屏幕
- 9. 登录屏幕中的屏幕捕获
- 10. 错误捕获屏幕Android由ddms
- 11. Android的ddms屏幕捕获与皮肤?
- 12. Eclipse中的Android屏幕捕获问题
- 13. 在Android中使用CoronaActivity捕获屏幕
- 14. 捕获的Android屏幕使用的FFmpeg
- 15. Android:没有根的屏幕捕获
- 16. 捕获android设备屏幕的代码?
- 17. 捕获模拟器屏幕(android):
- 18. 捕获屏幕图像而不捕获屏幕捕获垃圾邮件
- 19. 如何在android设备上捕获屏幕捕获事件?
- 20. 会话0捕获屏幕
- 21. 捕获屏幕截图
- 22. 屏幕捕获在IOS中
- 23. 捕获MKMapView屏幕截图
- 24. 屏幕捕获问题
- 25. ASP.NET - 捕获屏幕截图
- 26. 即时屏幕捕获Java
- 27. 使用CGDisplayStream捕获屏幕
- 28. Iphone屏幕视频捕获
- 29. 禁用屏幕捕获wp7
- 30. 使用SDL捕获屏幕?
这是公然不正确。为什么任何人都会赞成这个答案令人眼花缭乱。 – 2011-03-03 05:41:47
@Dedelder这实际上是非常正确的。查看framebuffer设备文件上的组所有权和权限,以及安全设备上没有本地激活的用户代码能够在必要的组中运行的事实。如果你与android架构师谈论此事,那么这是一个非常有目的的用户隐私决定,不让应用程序截图。 – 2011-03-03 15:39:27
但应用程序可以并且确实需要屏幕截图。他们只是不通过屏幕缓冲区。所以,或许这种方法在未来某个时候会被禁用(不太可能),但同时,你的答案实际上有些误导,因为你不提供(明显的)警告,如果目的是简单地对屏幕上的内容进行快照,不需要为此设置固定设备,并且在大多数情况下,它总共包含5行代码。 – 2011-03-03 17:21:09