使用普通截图方式截取surfaceview的人都会遇到surfaceview区域黑屏,也就是截取不到图片。然后各种百度google,有的说换用textureview,也有些别的方法。大概试了都没能成功,textureview是有对应方法。不过现在需要截图的是surfaceview。
Android在5.0系统之前,是没有开放视频录制的接口的,5.0之后Google开放了视频录制的接口,相关类是MediaProjection和MediaProjectionManager。
首先来说MediaProjectionManager,它是一个系统级的服务,类似WindowManager,AlarmManager等,你可以通过getSystemService方法来获取

MediaProjectionManager mMediaProjectionManager = (MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_SERVICE);

需要开始截屏需要调用MediaProjectionManager 的createScreenCaptureIntent返回的是一个intent,使用startactivity启动会弹出一个截屏授权框:

startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(),REQUEST_MEDIA_PROJECTION);
截屏成功后再onactivityResult回调,截取屏幕显示@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_MEDIA_PROJECTION) {if (resultCode != Activity.RESULT_OK) {Toast.makeText(this, "用户取消了", Toast.LENGTH_SHORT).show();return;}final ImageReader mImageReader = ImageReader.newInstance(ScreenUtils.getScreenWidth(this), ScreenUtils.getScreenHeight(this), 0x1, 2);mMediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",ScreenUtils.getScreenWidth(this), ScreenUtils.getScreenHeight(this), getResources().getDisplayMetrics().densityDpi,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,mImageReader.getSurface(), null, null);mImageName = System.currentTimeMillis() + ".png";new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Image image = null;if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {image = mImageReader.acquireLatestImage();}if (image == null) {return;}int width = 0;if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {width = image.getWidth();int height = image.getHeight();final Image.Plane[] planes = image.getPlanes();final ByteBuffer buffer = planes[0].getBuffer();int pixelStride = planes[0].getPixelStride();int rowStride = planes[0].getRowStride();int rowPadding = rowStride - pixelStride * width;Bitmap mBitmap;mBitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);mBitmap.copyPixelsFromBuffer(buffer);mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, width, height);image.close();if (mBitmap != null) {//拿到mitmapfinal Bitmap finalMBitmap = mBitmap;}}}}, 300);}}

由于刚开始录制直接截取图片可能会出现黑屏之类问题 ,所以这里延迟了300毫秒。通过这样,就可以获取到截屏,包括surfaceview或者其他界面。

android surfaceview截图 系统截图相关推荐

  1. android l m8,搭Android L HTC M8曝新系统截图

    在6月份的谷歌I/O开发者大会上Android L刚发布之后,HTC随即做出承诺称确定包括HTC One M8在内的多款机器可升级至最新的Android L,具体升级日期会在Android L正式版发 ...

  2. zuk z2 android 7.0,联想ZUK Z2确定升级安卓7.0:官方曝光系统截图

    TechWeb报道 作为联想搅局智能手机市场的重磅旗舰,ZUK Z2终于迎来了安卓7.0版本,主动曝光者是联想副总裁常程,他在个人微博上主动曝光了采用Android 7.0的ZUK Z2系统截图.由此 ...

  3. 小娜 api android,Android版小娜截图曝光:联通一切

    微软昨天正式宣布,语音助手Cortana小娜将登陆Android.iOS平台,并介绍了一些相应的功能特性.今天,微软又放出了一组Android版的截图,让大家提前预览其芳容. 按照微软的说法,Andr ...

  4. zuk z2 Android7.0官方,联想ZUK Z2确定升级安卓7.0:官方曝光系统截图

    [TechWeb报道]作为联想搅局智能手机市场的重磅旗舰,ZUK Z2终于迎来了安卓7.0版本,主动曝光者是联想副总裁常程,他在个人微博上主动曝光了采用Android 7.0的ZUK Z2系统截图.由 ...

  5. Tizen系统截图曝光 三星I9500或将率先采用

          1月10日消息,国外媒体日前公布了一组开源操作系统Tizen的系统截图,该系统计划于今年第一季度推出. 从本次曝光的图片中可以看出,Tizen和Bada的用户界面十分类似,还保留的MeeG ...

  6. Android播放网络视频截图

    Android播放网络视频截图 最近博主遇到一个Android电视的开发项目,项目需要电视客户端播放服务器端视频,通过遥控器一键截图,并将截图云推送到手机客户端,于是博主就开始找度神去求助了,毕竟以前 ...

  7. 【iphone4 iOS4+升级到 iOS 5 beta7详细过程与iOS 5系统截图】-Himi升级iOS 5 beta7 流程

    Himi 原创, 转载请注明出处,谢谢! 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6289625 (警告:因为当前iOS 5属于b ...

  8. Redmi K40系统截图曝光:配备顶级2K屏幕+骁龙870移动平台

    正如此前预测的,昨日小米集团中国区总裁.Redmi品牌总经理卢伟冰正式宣布,Redmi K40系列旗舰将于2月25日正式发布,至少包含Redmi K40和Redmi K40 Pro两款机型.随着发布时 ...

  9. 华为9x升级鸿蒙,荣耀9X升级鸿蒙2.0系统截图曝光:4G内存流畅度照样起飞!

    原标题:荣耀9X升级鸿蒙2.0系统截图曝光:4G内存流畅度照样起飞! 不知道大家是否还记得发布于两年前的华为荣耀9X手机?这款手机可谓是华为的里程碑机型,它打破了华为千元机不能买的行业共识,是当时名副 ...

最新文章

  1. 获取网页各种宽高的值
  2. Cocos2d-x 学习笔记一 HelloWorld
  3. Pygame:编写一个小游戏
  4. ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
  5. 1.9_heap_topK_topK问题
  6. Linux下的特殊权限SetUID
  7. 演唱会舞台怎么设计?不妨看看这位建筑大师怎么玩!
  8. linux 下对SSD 进行读写测试
  9. ESP32+DHT11+Arduino连接phpstudy的本地数据库
  10. python3保存的npy文件,python2无法读取的可能解决方案。
  11. leaflet绘制具有虚线框的多边形(125)
  12. vue pc支付宝支付
  13. 【论文】b站 - 读论文的麦小哲 学习笔记
  14. [iPhone]解决:手指按住不动时,屏幕也会上下抖动
  15. pdf转图片的两种方式(java)
  16. HTML和CSS隐藏元素的四种方法
  17. 开始iOS 7中自动布局教程(二)
  18. pandas 统计一周中的每个位置的NO2平均浓度
  19. win11系统下word文档中鼠标指针消失解决方案
  20. 使用js删除表格中的一行的一个小练习

热门文章

  1. [知行]Java题库
  2. 华山论剑之契约式编程与防御式编程
  3. sci写作sci写作模板_我的2013年写作和口语
  4. 港科百创 | 校友企业“Klavi”A轮融资1500万美金!
  5. 建筑物风环境的计算机数值模拟,针对FLUENT软件的建筑物风场数值模拟.pdf
  6. 手把手教你做一个新浪博客发布软件JAVA版本(5)--打开博客发布页面并解析博客内容
  7. android删除sd卡照片恢复,安卓手机照片误删怎么恢复
  8. c语言wscript.echo用法,WScript.Shell和一种替换方法(如何从 HTA 中启动应用程序?)...
  9. 计划策略之10 (一)
  10. 建模中的定量预测拟合方法