Android WebView截屏空白或者一片黑如何解决?使用MediaProjection截图。
直接上代码:
入口方法: startTakeScreenShot()
出口方法:返回的Bitmap对象在onActivityResult() 有todo的注释
注意:该截屏方式 在 build.gradle属性 stargetSdk >=30 的情况下会报错。我这边是28。
val EVENT_SCREENSHOT = 22 //截图事件private var mediaProjectionManager: MediaProjectionManager? = nullprivate var mediaProjection: MediaProjection? = nullprivate var image: Image? = null// 开始截屏方法fun startTakeScreenShot() {mediaProjectionManager =application.getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManagerstartActivityForResult(mediaProjectionManager!!.createScreenCaptureIntent(),EVENT_SCREENSHOT)}@SuppressLint("WrongConstant")override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_PIC) {if (data != null) {val pathList: List<String>? =data.getStringArrayListExtra(Repair_ImgSelActivity.INTENT_RESULT)doPicDataS(pathList)}}if (requestCode == EVENT_SCREENSHOT) {super.onActivityResult(requestCode, resultCode, data)Log.e("whh0914", "captureScreen...")val displayMetrics = DisplayMetrics()val windowManager = this.getSystemService(WINDOW_SERVICE) as WindowManagerwindowManager.defaultDisplay.getMetrics(displayMetrics)val width = displayMetrics.widthPixelsval height = displayMetrics.heightPixelsval mImageReader: ImageReader =ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2)mediaProjection = mediaProjectionManager?.getMediaProjection(resultCode, data!!)val virtualDisplay = mediaProjection?.createVirtualDisplay("screen-mirror",width,height,displayMetrics.densityDpi,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,mImageReader.surface,null,null)Handler().postDelayed(Runnable {try {image = mImageReader.acquireLatestImage()if (image != null) {val planes: Array<Image.Plane> = image!!.planesval buffer: ByteBuffer = planes[0].bufferval width: Int = image!!.widthval height: Int = image!!.heightval pixelStride: Int = planes[0].pixelStrideval rowStride: Int = planes[0].rowStrideval rowPadding = rowStride - pixelStride * widthvar bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride,height,Bitmap.Config.ARGB_8888)bitmap!!.copyPixelsFromBuffer(buffer)bitmap =Bitmap.createScaledBitmap(bitmap, bitmap.width, bitmap.height, false)val pipelineFragment = viewPagerAdapter.fragmentList[1] as PipelineFragmentpipelineFragment.mWebView.visibility = View.GONEif (bitmap != null) {// 这里获取到截到的Bitmap对象// 下面是将bitmap保存到SD卡中的方法:如有需要请参考博客:https://blog.csdn.net/qq_39731011/article/details/123640342 如不需要请删除ImageSaveUtil.saveAlbum(this,bitmap,Bitmap.CompressFormat.JPEG, 80, true)}bitmap.recycle()}} catch (e: java.lang.Exception) {Log.e("截图", "出现异常:$e")} finally {if (image != null) {image!!.close()}if (mImageReader != null) {mImageReader.close()}virtualDisplay?.release()//该代码为了避免出现BufferQueueProducer: [ImageReader] dequeueBuffer: BufferQueue has been abandonedmImageReader.setOnImageAvailableListener(null, null)mediaProjection?.stop()}}, 300)//这里的延迟是为了 不截取到 系统提示是否允许录屏的弹框,可自行调整,经深海测试一般100-500为最佳}}
Android WebView截屏空白或者一片黑如何解决?使用MediaProjection截图。相关推荐
- Android截屏截图方法汇总(Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)
Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的 ...
- Android实现截屏和截长图功能的几种方法
一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...
- Android实现截屏方式
本文介绍了Android 实现截屏方式整理,分享给大家.希望对大家有帮助 可能的需求: 截自己的屏 截所有的屏 带导航栏截屏 不带导航栏截屏 截屏并编辑选取一部分 自动截取某个空间或者布局 截取长图 ...
- android WebView截长图实现
1.先简单介绍下webview截屏,看代码: //开启缓存 webview.setDrawingCacheEnabled(true); webview.buildDrawingCache();Bitm ...
- Android系统截屏的实现(附代码)
1.背景 写博客快两年了,写了100+的文章,最火的文章也是大家最关注的就是如何实现android系统截屏.其实我们google android_screen_shot就会找到很对办法,但那些都是很多 ...
- android 截长图 方法,Android实现截屏与截长图功能
本文实例为大家分享了Android实现截屏与截长图功能展示的具体代码,供大家参考,具体内容如下 Demo在GitHub的地址:ScreenShoot 在Android开发中,有时候会遇到需要截屏分享到 ...
- android后台截屏实现(2)--screencap源码修改
首先找到screencap类在Android源码中的位置,/442/frameworks/base/cmds/screencap/screencap.cpp. 源码如下: [cpp] view pla ...
- android长截屏代码,android长截屏原理及实现代码
android长截屏原理及实现代码 发布时间:2020-08-31 06:55:16 来源:脚本之家 阅读:158 作者:Android笔记 小米系统自带的长截屏应该很多人都用过,效果不错.当长截屏时 ...
- Android手机截屏
对于android手机截屏,据我所知,现在主要有三种方法. 第一种,通过DDMS. 把手机连接上电脑,运行DDMS,选中你的手机设备,然后点击菜单"设备"->"Sc ...
最新文章
- 2015c语言成绩查询,2015年3月全国计算机二级C语言选择第1套
- SQL语句like子句中的转义符
- buu 权限获得第一步
- 使用HTML5在浏览器中开发虚拟现实业务
- linux KVM win虚拟机磁盘扩容(qcow2)
- C++ 数据指针(-)
- Ubuntu目录结构简单介绍笔记
- [vscode] 显示空格
- 亚马逊的新Linux发行版对红帽造成了威胁
- LeetCode简单题目(#27 #28 #35 #38)-2019.10.23-4道
- 【MySQL】Unknown column 'column_name' in 'field list'
- html5类似ios下拉选择器,iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 - mufc-go...
- Matlab中实现均匀量化
- 并查集算法最全最详细讲解
- 微信小程序 指纹识别
- 计算机音乐名侦探柯南简谱,《名侦探柯南》主题旋律|卡林巴琴简谱专用谱...
- 美赛数模论文之表的格式
- 巨头发力,社区电子商务发展加速
- Nginx服务详细篇从基础到反向代理和负载均衡
- java开发手机app_java 怎么开发手机app接口?