android截屏功能实现方式汇总【包括后台截屏】
前言
对于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
中就能看到效果。
优点:
- 实现简单
- 无权限要求
缺点:
- 只能截应用页面,状态栏不会被截进去,对于全屏截图的需求不适用
- 因为
getWindow()
是Activity中的方法,所以只能在Activity中调用(无法后台截屏)
MediaProjectionManager
MediaProjectionManager
是一个录屏的API,我们可以通过获取其中一帧的方式来得到截图。此方法网上教程很多,大家可以自行搜索。
优点:
没啥优点,只是多了一种截图方案
缺点:
- 代码比较复杂
- 每次截图前会弹窗获取权限,询问是否允许录屏,这对用户体验来说是致命的
- 无法后台截屏,因为需要调用Activity中的
onActivityResult()
方法
使用SurfaceControl.screenshot
SurfaceControl.screenshot
是系统的截屏API,不受Activity的限制,所以可以用来实现后台截图、全屏截图、指定区域截图等功能。
具体使用方式可参考我的这篇文章:SurfaceControl.screenshot()用法
优点:
- 使用无限制,可以在后台使用
- 功能强大,且调用方式简单
- 不用向用户申请权限,同时也无任何弹窗显示
缺点:
- 系统API,必须有系统签名和系统级别权限,普通app用不了此方法
service中创建一个透明的activity,并在activity中调用截图方法
此方法未试验过,不过service确实可以在后台创建一个activity出来,但是限制很多(可参考我的这篇文章:从后台启动activity无效的原因)。同时activity虽然是透明的,但是页面切换的动画效果可能会暴露app的行为,总之并不是一个有效的方法。
修改并编译源码中的screencap类
优点:
优点不大,不建议对系统类进行改造,如果实力允许,使用此方法可以免掉一些绕圈圈的调用方式和系统的限制
缺点:
难度大,需要有源码编译和源码修改的能力
android截屏功能实现方式汇总【包括后台截屏】相关推荐
- Android带三角形的弹窗,Android实现三角形气泡效果方式汇总
在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡 ...
- win电脑自带录屏功能吗?电脑win10怎么录屏
如今大多数人都是用电脑来完成工作和学习的,当然不可避免地需要用到录屏软件.但由于大家对电脑win10的录屏软件不是很了解,所以很多人都不知道win10怎么录屏.今天小编就给大家回答一下电脑自带的录屏功 ...
- ipad分屏功能怎么开启_win10怎么开启投屏功能
win10怎么开启投屏功能 win10怎么开启投屏功能这一项是建立在我们电脑的显卡.网卡都支持Miracast投屏协议的基础上,不要然这个[win10怎么开启投屏功能]也就没有意义了. Miracas ...
- 苹果xr如何截屏_苹果手机居然自带长截屏功能了?iPhone的多种截屏方式,涨知识了...
苹果手机和安卓手机各有千秋,很多使用苹果手机的小伙伴都说,安卓手机截长图这么简单,为什么苹果手机还需要下载一些软件才行?今天小编就来分享一下苹果手机的截图方式以及升级了iOS13之后如何长截屏. 一. ...
- 关于钉钉投屏功能(通过企业工作台设置投屏)无法通过js取得数据的问题
在工作中,为了将业务团队的服务构建状态展示(jenkins上的数据),更好的提醒业务团队去及时的处理问题,公司决定将构建数据展示到钉钉投屏上,定时刷新. 项目前端使用vue+element+nodej ...
- ipad怎么和mac分屏_苹果分屏功能怎么用?开启ipad分屏只需要一个步骤!
苹果分屏功能怎么用?很多安卓设备已经支持分屏,但是目前为止苹果还没有在手机上推出官方的分屏功能,想要使用分屏的话需要借助第三方应用.不过在ipad中已经可以使用分屏的功能,接下来就给大家分享一下ipa ...
- php手机投屏功能,原来手机自带的投屏功能这么强大,没用过的话,那就太可惜了...
对于现在来说,人手一部手机是非常常见的事情了,所以这也就导致电脑的使用比起以前来说大大减少,只不过手机毕竟是小屏设备,很多人用久了眼睛会感到不适应,遇到这种情况你是否想过将手机投影到电视电脑上,进行大 ...
- android 滑屏功能,Android 滑屏效果实现方式汇总
Android的滑屏,最近在研究这个东西,发现新浪微博的客户端.腾讯微博的客户端都有这个功能.目前到今天为止,腾讯和微博的客户端都是使用viewPager控件写的,可能重写了一些地方.而腾讯老版本的q ...
- Android几种定时任务实现方式汇总
目录 前言 方式一:AlarmManager API19之前AlarmManager常用的一些方法 参数说明 使用举例 AlarmManager实例Demo讲解(包含版本适配以及高版本设置重复闹钟) ...
最新文章
- C++开源库,欢迎补充。
- ifconfig没有命令 kali_新装的Linux系统没有ifconfig命令?教你一键找回
- 互联网协议 — 使用 Wireshark 调试 HTTPS 及 HTTP/2 流量
- 习题7 7-7 字符排队
- PC端设置每行固定三个元素多余换行
- 【计算几何】【预处理】【枚举】Urozero Autumn Training Camp 2016 Day 5: NWERC-2016 Problem K. Kiwi Trees...
- Halcon图像增强方法与原理概述
- Linux shell脚本中shift的用法说明
- 大一计算机应用的实验报告,大一《计算机应用基础》实验报告1.doc
- fzu 2077 The tallest tree
- 截屏自动合成一张长图_拼长图有了新姿势,全自动的截图拼接:Tailor
- 数字图像处理实验MATLAB版+实验报告亲笔
- 数据库读写分离下的数据同步解决方案
- 入手新吉他了--雅马哈F600
- 关心国事-21世纪经济报道:周鸿祎人治雅虎中国
- KittenCode编程平台
- 浙江印发政府数字化转型工作方案,多处提及电子签名、签章、印章
- 不知道Android开发中有哪些权限?看这里
- APP上短信验证码如何验证?
- 【常见问题】Waki_谢老师B站的HCNP/HCIP课程第27集的华为eNSP路由器配置问题——百兆口不能添加IP地址