Android 请问如何实现截屏功能?

2016 年 11 月 26 日
 pcatzj

View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); view.getDrawingCache();

我本来时通过这种简单的方法来获取应用截图,但是现在发现一个问题,就是这个方法截取不了程序中的 PopupWindow ,所以请问还有什么截图的方法吗?我可以调用系统的截图吗?如果可以,那要怎么操作呢?

13471 次点击
所在节点    Android
18 条回复
q397064399
2016 年 11 月 26 日
读写 linux 的 /dev/下的图形设备 网上有,貌似需要 ADK
q397064399
2016 年 11 月 26 日
q397064399
2016 年 11 月 26 日
不用 ADK 搞错了,很多年前,玩安卓的时候 收藏的,
busymilk
2016 年 11 月 26 日
直接用 view 的 draw ,传进一个 canvas ,就行了
q397064399
2016 年 11 月 26 日
上 github 找个成熟的,只要是用 /dev/下设备读的 就是全屏截图
Cabana
2016 年 11 月 26 日
6.0 以上 有个新的录屏 api 可以用,不用 root
pcatzj
2016 年 11 月 26 日
@busymilk 关键这个 view 怎么获得呢, decorView 不包括 PopupWindow 啊
pcatzj
2016 年 11 月 26 日
@Cabana 那 6.0 以下的能兼容吗
srx1982
2016 年 11 月 26 日
@pcatzj 显然不能
pcatzj
2016 年 11 月 26 日
@srx1982 那没办法, 6.0 起步太高了,只能再找别的办法了
Jabin
2016 年 11 月 26 日
@pcatzj 是 5.0 不是 6.0. meidaprojection
GhostFlying
2016 年 11 月 26 日
popup window 的 view 还不是你自己的。。一样可以 draw 啊,读取 /dev 下的确可行,实际上系统的截图也是这么实现的(严格来说系统调用的某个命令是这么实现的),但估计需要 root 权限。

MediaProjection API 是好东西, 5.0 可用,但是提醒下,这个 API 使用需要用户显式弹窗授权,以及默认情况下每次都要重新授权。
pcatzj
2016 年 11 月 26 日
@Jabin 对,我看到了,但是 5.0 之下要怎么处理啊
pcatzj
2016 年 11 月 26 日
@GhostFlying 难道我还在每个 activity 里面把 popupWindow 合并进去?那我不是要在每个 activity 里面写一套?
GhostFlying
2016 年 11 月 26 日
@pcatzj 你不能 act draw 到 canvas 上,然后 popup window 再 draw 覆盖上去么。。
pcatzj
2016 年 11 月 26 日
@GhostFlying 关键是要怎么获取界面的 popupWindow 或者 dialog 呢?不是一个界面的截屏,是整个 app 的截屏
Jabin
2016 年 11 月 28 日
@pcatzj 5.0 下就没必要了,市场份额很小了,就不支持了,实在要支持的话,也只能支持已 root 用户
pcatzj
2016 年 11 月 28 日
@Jabin 且不管 5.0 以下的份额是不是真的很小。因为说了这是个内部应用,员工的手机都是公司发的,很多还是几年前的, 5.0 以下有很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/323488

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX