• Android 截屏的各种骚操作


    本文公众号「AndroidTraveler」首发。

    背景

    在实际的应用场景中,Android 手机的截屏其实是很普遍的。

    比如说 PPT 演示,比如说技术博客图文并茂讲解。

    因此懂得 Android 手机截屏的各种操作就显得尤为重要。

    使用 AndroidStudio 自带的截屏工具

    在 Logcat 选项卡的左边工具栏有个拍照图标,点击一下就可以了。

    点击之后会弹出下面框,上面有一些操作可以点击,可以看到分别是重新截图、往左旋转、往右旋转、拷贝到粘贴板。

    使用 Vysor

    如果你使用的浏览器是 Chrome 浏览器,那么直接添加 Vysor 扩展程序即可。

    使用 Vysor 要求手机端也要安装,但是你启动电脑端的 Vysor,会自动在你手机进行安装。

    可以看到截屏也是点击拍照按钮即可。

    使用 adb 命令行

    执行命令

    adb shell /system/bin/screencap -p /sdcard/tmp.png
    

    其中最后一个字符串是路径,你需要指定你截取的图片保存的位置。

    在上面的演示里面,是 /sdcard/tmp.png。

    接着把手机保存的截图 pull 到桌面端。

    执行命令

    adb pull /sdcard/tmp.png .
    

    其中最后一个字符串是你桌面端的路径,你需要指定手机拉取的图片保存在客户端哪个位置。

    在上面的演示里面,是当前目录。

    使用系统截图工具

    这个不用多说了,直接使用系统的截图工具进行截图即可。默认会保存到相册。

    你以为到这里就结束了?

    真正背景

    在上述背景的前提下,当我用尽上面的截图方法时,每个方法对应的结果如下:

    第一个:直接把我 AndroidStudio 的截图工具搞奔了,点击提示错误。

    第二个:Vysor 直接黑屏。

    第三个:adb pull 出来的图片大小为 0 KB。

    第四个:提示不可截屏。

    其实前面三种方法不行我们觉得还好,但是最后系统这种方法不行。那就要考虑是不是系统层面做了处理。

    代码设置不允许截屏

    在 Android 项目里面,通过设置可以让界面不允许执行截屏操作。

    设置也很简单,就是在 Activity 里面增加下面语句即可:

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    

    那么,如何解决呢?

    自己的 APP

    如果是自己的 APP,那么很简单,直接给代码临时加个注释就可以了。

    其他 APP

    可能你会考虑既然是给 Activity 设置禁止截屏标志,那么我另外开一个应用,然后给 Activity 设置透明,是不是就可以起到间接的截屏操作?

    答案是不行的。这边实际测试验证了,只要禁止截屏的界面可见,就算它的 onPause 回调了,也是不可以截屏的。表现在 Vysor 上就是有一层黑色背景叠加在上面一样。

    所以,假设真的需要,直接拿另一个手机拍照吧。

    思考

    一般设置不允许截屏肯定是有一些考虑的(诸如安全之类的),所以要不要强制获取界面,还是要考虑清楚的。

  • 相关阅读:
    如何设置nginx日志格式来查看负载分担结果
    Nginx缓存使用官方教程及常见问题解答
    nginx缓存和flask_cache
    flask_wtf/wtforms几个坑点,先简单记此
    maven-dependency-plugin插件的使用
    maven+jenkins+jmeter性能测试:maven把项目依赖拷贝到项目指定位置
    sudo:抱歉,您必须拥有一个终端来执行 sudo 解决办法;ssh执行sudo命令的方法;给用户增加sudo免密权限
    innerHTML引起IE的内存泄漏
    innerHTML与IE浏览器内存泄露问题
    IE内存泄露与无法回收研究小结
  • 原文地址:https://www.cnblogs.com/nesger/p/10904089.html
Copyright © 2020-2023  润新知