前言

对于android实现截屏功能,简单讲述一下可行的方法和之间的利弊


使用canvas

View v = getWindow().getDecorView();
Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas();
canvas.setBitmap(bitmap);
v.draw(canvas);ImageView image = findViewById(R.id.image);
image.setImageBitmap(bitmap);

以上就是最简单的一种形式,通过画布将当前页面变成bitmap,然后直接加载到ImageView中就能看到效果。
优点:

  1. 实现简单
  2. 无权限要求

缺点:

  1. 只能截应用页面,状态栏不会被截进去,对于全屏截图的需求不适用
  2. 因为getWindow()是Activity中的方法,所以只能在Activity中调用(无法后台截屏)

MediaProjectionManager

MediaProjectionManager是一个录屏的API,我们可以通过获取其中一帧的方式来得到截图。此方法网上教程很多,大家可以自行搜索。
优点:
没啥优点,只是多了一种截图方案

缺点:

  1. 代码比较复杂
  2. 每次截图前会弹窗获取权限,询问是否允许录屏,这对用户体验来说是致命的
  3. 无法后台截屏,因为需要调用Activity中的onActivityResult()方法

使用SurfaceControl.screenshot

SurfaceControl.screenshot是系统的截屏API,不受Activity的限制,所以可以用来实现后台截图、全屏截图、指定区域截图等功能。
具体使用方式可参考我的这篇文章:SurfaceControl.screenshot()用法
优点:

  1. 使用无限制,可以在后台使用
  2. 功能强大,且调用方式简单
  3. 不用向用户申请权限,同时也无任何弹窗显示

缺点:

  1. 系统API,必须有系统签名和系统级别权限,普通app用不了此方法

service中创建一个透明的activity,并在activity中调用截图方法

此方法未试验过,不过service确实可以在后台创建一个activity出来,但是限制很多(可参考我的这篇文章:从后台启动activity无效的原因)。同时activity虽然是透明的,但是页面切换的动画效果可能会暴露app的行为,总之并不是一个有效的方法。


修改并编译源码中的screencap类

优点:
优点不大,不建议对系统类进行改造,如果实力允许,使用此方法可以免掉一些绕圈圈的调用方式和系统的限制

缺点:
难度大,需要有源码编译和源码修改的能力

android截屏功能实现方式汇总【包括后台截屏】相关推荐

  1. Android带三角形的弹窗,Android实现三角形气泡效果方式汇总

    在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡 ...

  2. win电脑自带录屏功能吗?电脑win10怎么录屏

    如今大多数人都是用电脑来完成工作和学习的,当然不可避免地需要用到录屏软件.但由于大家对电脑win10的录屏软件不是很了解,所以很多人都不知道win10怎么录屏.今天小编就给大家回答一下电脑自带的录屏功 ...

  3. ipad分屏功能怎么开启_win10怎么开启投屏功能

    win10怎么开启投屏功能 win10怎么开启投屏功能这一项是建立在我们电脑的显卡.网卡都支持Miracast投屏协议的基础上,不要然这个[win10怎么开启投屏功能]也就没有意义了. Miracas ...

  4. 苹果xr如何截屏_苹果手机居然自带长截屏功能了?iPhone的多种截屏方式,涨知识了...

    苹果手机和安卓手机各有千秋,很多使用苹果手机的小伙伴都说,安卓手机截长图这么简单,为什么苹果手机还需要下载一些软件才行?今天小编就来分享一下苹果手机的截图方式以及升级了iOS13之后如何长截屏. 一. ...

  5. 关于钉钉投屏功能(通过企业工作台设置投屏)无法通过js取得数据的问题

    在工作中,为了将业务团队的服务构建状态展示(jenkins上的数据),更好的提醒业务团队去及时的处理问题,公司决定将构建数据展示到钉钉投屏上,定时刷新. 项目前端使用vue+element+nodej ...

  6. ipad怎么和mac分屏_苹果分屏功能怎么用?开启ipad分屏只需要一个步骤!

    苹果分屏功能怎么用?很多安卓设备已经支持分屏,但是目前为止苹果还没有在手机上推出官方的分屏功能,想要使用分屏的话需要借助第三方应用.不过在ipad中已经可以使用分屏的功能,接下来就给大家分享一下ipa ...

  7. php手机投屏功能,原来手机自带的投屏功能这么强大,没用过的话,那就太可惜了...

    对于现在来说,人手一部手机是非常常见的事情了,所以这也就导致电脑的使用比起以前来说大大减少,只不过手机毕竟是小屏设备,很多人用久了眼睛会感到不适应,遇到这种情况你是否想过将手机投影到电视电脑上,进行大 ...

  8. android 滑屏功能,Android 滑屏效果实现方式汇总

    Android的滑屏,最近在研究这个东西,发现新浪微博的客户端.腾讯微博的客户端都有这个功能.目前到今天为止,腾讯和微博的客户端都是使用viewPager控件写的,可能重写了一些地方.而腾讯老版本的q ...

  9. Android几种定时任务实现方式汇总

    目录 前言 方式一:AlarmManager API19之前AlarmManager常用的一些方法 参数说明 使用举例 AlarmManager实例Demo讲解(包含版本适配以及高版本设置重复闹钟) ...

最新文章

  1. C++开源库,欢迎补充。
  2. ifconfig没有命令 kali_新装的Linux系统没有ifconfig命令?教你一键找回
  3. 互联网协议 — 使用 Wireshark 调试 HTTPS 及 HTTP/2 流量
  4. 习题7 7-7 字符排队
  5. PC端设置每行固定三个元素多余换行
  6. 【计算几何】【预处理】【枚举】Urozero Autumn Training Camp 2016 Day 5: NWERC-2016 Problem K. Kiwi Trees...
  7. Halcon图像增强方法与原理概述
  8. Linux shell脚本中shift的用法说明
  9. 大一计算机应用的实验报告,大一《计算机应用基础》实验报告1.doc
  10. fzu 2077 The tallest tree
  11. 截屏自动合成一张长图_拼长图有了新姿势,全自动的截图拼接:Tailor
  12. 数字图像处理实验MATLAB版+实验报告亲笔
  13. 数据库读写分离下的数据同步解决方案
  14. 入手新吉他了--雅马哈F600
  15. 关心国事-21世纪经济报道:周鸿祎人治雅虎中国
  16. KittenCode编程平台
  17. 浙江印发政府数字化转型工作方案,多处提及电子签名、签章、印章
  18. 不知道Android开发中有哪些权限?看这里
  19. APP上短信验证码如何验证?
  20. 【常见问题】Waki_谢老师B站的HCNP/HCIP课程第27集的华为eNSP路由器配置问题——百兆口不能添加IP地址

热门文章

  1. DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释,剪枝技巧)
  2. 正则表达式 校验基础
  3. 阅读笔记《CKF滤波算法及其在航天器自主导航中的应用》
  4. MIT林达华对数学的思考
  5. [渝粤题库]西北工业大学高等数学(下)
  6. 地下高差十米不能设置什么_您可能没有听说过的十项地下技术策划人
  7. SSM整合ActiveMQ
  8. MDK-ARM V5.28的Bug被修复了吗?
  9. 普通门禁卡及各类复制卡相关知识
  10. 1 | Nessus使用