android开发之局域网内屏幕共享+提取文字01:截屏

一、理由
1、起因:因为疫情的原因,导致自己在家上网课,而学习兴趣不大,所以搞一些小玩意来提供自己的学习的兴趣和锻炼下自己,就做了up主,(有兴趣的朋友可以关注下我:算个法)。由学习通的线上考试,自己想到了一个奇妙的方法来应付学习通的线上考试,那就是用两部手机来作弊,一部作为客户端,分享屏幕,一部作为服务端,接受屏幕和提取屏幕的文字(最初可能有点作弊的想法,最后就没有了,期末还是好好复习好,这博客只是为了交流技术,不是作弊)。
2、经过:之后就网上乱找资源,最后在一位博主的指导下完成了该小玩意(博主账号:Android唐浮),最后谢谢博主的帮忙。
3、结果:
android开发之局域网内屏幕共享+提取文字01:截屏_第1张图片
android开发之局域网内屏幕共享+提取文字01:截屏_第2张图片
客户端有缺点,就是只能用一次,点击停止服务后会出现anr,不知道为什么,解决了朋友望告知(目测应该是我在循环中一直创造新变量的原因)
二、方法
就是客户端不断截屏,通过socket发送给服务端,服务器通过百度OCR(文字识别)获取文字。
三、截屏的实现
1、类和方法
①、获得屏幕的参数
类:WindowManager或者方法:getResources()
两者区别链接
②、得到surface(手机屏幕)类
MediaProjectionManage
MediaProjection
ImageReader (ImageReader是截屏的,如果要录屏用 MediaRecord)
VirtualDisplay
③文件的类
File、FileOutputStream、FileOutputStream
④ImageReader 中的surface转换为Bitmap类
ImageReader ,image,Bitmap
2、权限

//读写磁盘
    
    
    //记录权限,录屏
    
    //获得系统情况
        
        //写其他外存
          
  

3、步骤(详细看代码)
①初始化一个MediaProjectionManager
②创建并启动Intent
③在onActivityResult中拿到MediaProjection所需数据,并创建MediaProjection
④创建ImageReader类,为了之后接受surface
⑤创建VirtualDisplay,给ImageReader surface
⑥ImageReader装换为Bitmap
⑦Bitmap存储在文件中
4、代码问题
就是不能一直录屏,容易出现anr问题
四、源码
五、第一次做项目,发现一个学习方法
源码+官方文档(知道源码的类后去查文档)
一直做项目很累,贵在坚持
参考资料:
两个类实现Android录制屏幕功能
Android截屏、录屏工具

你可能感兴趣的:(Android)