V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pcatzj
V2EX  ›  Android

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

  •  
  •   pcatzj · 2016-11-26 16:15:43 +08:00 · 10005 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    18 条回复    2016-11-28 14:41:08 +08:00
    q397064399
        1
    q397064399  
       2016-11-26 18:30:25 +08:00
    读写 linux 的 /dev/下的图形设备 网上有,貌似需要 ADK
    q397064399
        2
    q397064399  
       2016-11-26 18:31:02 +08:00
    q397064399
        3
    q397064399  
       2016-11-26 18:32:19 +08:00
    不用 ADK 搞错了,很多年前,玩安卓的时候 收藏的,
    busymilk
        4
    busymilk  
       2016-11-26 18:32:50 +08:00
    直接用 view 的 draw ,传进一个 canvas ,就行了
    q397064399
        5
    q397064399  
       2016-11-26 18:33:56 +08:00
    上 github 找个成熟的,只要是用 /dev/下设备读的 就是全屏截图
    Cabana
        6
    Cabana  
       2016-11-26 19:47:22 +08:00
    6.0 以上 有个新的录屏 api 可以用,不用 root
    pcatzj
        7
    pcatzj  
    OP
       2016-11-26 19:59:21 +08:00
    @busymilk 关键这个 view 怎么获得呢, decorView 不包括 PopupWindow 啊
    pcatzj
        8
    pcatzj  
    OP
       2016-11-26 19:59:41 +08:00
    @Cabana 那 6.0 以下的能兼容吗
    srx1982
        9
    srx1982  
       2016-11-26 20:04:05 +08:00
    @pcatzj 显然不能
    pcatzj
        10
    pcatzj  
    OP
       2016-11-26 20:05:34 +08:00
    @srx1982 那没办法, 6.0 起步太高了,只能再找别的办法了
    Jabin
        11
    Jabin  
       2016-11-26 21:36:33 +08:00
    @pcatzj 是 5.0 不是 6.0. meidaprojection
    GhostFlying
        12
    GhostFlying  
       2016-11-26 21:41:57 +08:00
    popup window 的 view 还不是你自己的。。一样可以 draw 啊,读取 /dev 下的确可行,实际上系统的截图也是这么实现的(严格来说系统调用的某个命令是这么实现的),但估计需要 root 权限。

    MediaProjection API 是好东西, 5.0 可用,但是提醒下,这个 API 使用需要用户显式弹窗授权,以及默认情况下每次都要重新授权。
    pcatzj
        13
    pcatzj  
    OP
       2016-11-26 21:58:49 +08:00
    @Jabin 对,我看到了,但是 5.0 之下要怎么处理啊
    pcatzj
        14
    pcatzj  
    OP
       2016-11-26 22:00:22 +08:00
    @GhostFlying 难道我还在每个 activity 里面把 popupWindow 合并进去?那我不是要在每个 activity 里面写一套?
    GhostFlying
        15
    GhostFlying  
       2016-11-26 22:02:25 +08:00
    @pcatzj 你不能 act draw 到 canvas 上,然后 popup window 再 draw 覆盖上去么。。
    pcatzj
        16
    pcatzj  
    OP
       2016-11-26 22:54:20 +08:00
    @GhostFlying 关键是要怎么获取界面的 popupWindow 或者 dialog 呢?不是一个界面的截屏,是整个 app 的截屏
    Jabin
        17
    Jabin  
       2016-11-28 13:43:47 +08:00
    @pcatzj 5.0 下就没必要了,市场份额很小了,就不支持了,实在要支持的话,也只能支持已 root 用户
    pcatzj
        18
    pcatzj  
    OP
       2016-11-28 14:41:08 +08:00
    @Jabin 且不管 5.0 以下的份额是不是真的很小。因为说了这是个内部应用,员工的手机都是公司发的,很多还是几年前的, 5.0 以下有很多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   843 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:22 · PVG 05:22 · LAX 13:22 · JFK 16:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.