
摘要:最近的公司的签写demo,需要在之前的签写、拍照、抽奖的基础上追加一个投屏的功能。一番收索之后,时间就是一周过去,想想自己都尴尬了。考虑了种种实现方式,什么只截取程序本身的界面啊,让后通过socket进行传输。通过直播流阿…等等。最后不得不放弃了。原因一个自己“low“, 对编码问题一窍不通,更不说推流了。
这里只对截图做记录,采取直接截屏的方式原因因为,只截取程序自身的图片。也还是需要用户授权。surfaceview 大小对于截取音视频。哈. . hahah… . . 尴尬的笑笑
????开篇吐槽一下自己,从上班之后,由于公司没有什么活。就开启自己的抄抄模式。前期的时候一次性的转载了40片左右文章。原因也是在上班之际,白纸一张。那时候感觉抄着文章,感觉还可以能看懂。到了如今发现抄不动了。哎!!! 发现自己已经在奔溃中了。
????这里先从5.0开始。在5.0的时候系统提供了截屏的API,5.0之前需要Root权限,罗列三个链接,分别Google官方的demo,5.0截屏屏传输,5.0之前的截屏。
googlesamples/android-ScreenCapture
屏幕录制(一)——MediaProjection 简介
android-notes/androidScreenShareAndControl其中有反向控制,可以通过投屏的显示界面操作手机端
????对于截取图片的流程都是一样的,通过MediaProjectionManager , MediaProjection , VirtualDisplay , ImageReader 四个类就可以完成截图。现在知道通过以上四个类就可以完成截图,并获取 Bitmap。下面就对这几个类做一个Google翻译的一个记录。
????MediaProjectionManager
????Manager 看见这个就想到了这是一个管理类,需要通过getSystemService()去获取实例对象。类的注释为
/**
* Manages the retrieval of certain types of {@link MediaProjection} tokens.
*
* <p>
* Get an instance of this class by calling {@link
* android.content.Context#getSystemService(java.lang.String)
* Context.getSystemService()} with the argument {@link
* android.content.Context#MEDIA_PROJECTION_SERVICE}.
* </p>
*/????可用的公用的方法只有两个,分别为“createScreenCaptureIntent() , getMediaProjection()“ ,从上面可以真正进行截屏操作的类还是“MediaProjection“ 。这里需要注意一下,并不同于其他的 XXXXManager再获取实例对象后就可以调用公有方法了。这里需要分为两步:????第一步 Intent captureIntent = projectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, RECORD_REQUEST_CODE);????第二步
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-58101-1.html
fightordie