android截屏功能实现方式汇总【包括后台截屏】 您所在的位置:网站首页 手机连续截屏如何操作图片 android截屏功能实现方式汇总【包括后台截屏】

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

2024-07-13 01:10| 来源: 网络整理| 查看: 265

前言

对于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类

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有