下面是手机截屏的 跟录屏差不多但是存储是用的image
以上是我自己写的一个demo,这里有几点需要注意的是:
1.开启应用的时候需要权限(读写丶录像录音)
2.在26(8.0以后)不能直接在activity中进行操作了,需要开前台服务并创建通知来实现,在activity中做了极少的录屏初始化的编写,只调用了一个开启回调的方法(mediapro),在onactivityresult中开启服务startforegroundservice,并把你所需的内容传过去
3.在mainfest中注册服务,有几点需要注意,第一需要加上requestlegacy..=true(否则你的存储会报错,导致后面直接挂壁)第二添加FOREGROUND_SERVICE权限(存储,录音这些也有)第三注册service需要添加forgoundservicetype=mediaprojetion属性
4.在已经注册的service中的第一件事初始化一个通知栏,具体设置可以参考网上很多,然后初始化record
丶mediapro丶virtualdisplay就能愉快的开启录屏了
在录屏结束记得释放资源,取消的方法也已经加上了
问题点:
1.在小米手机上正常,在华为三星手机上这套代码必蹦,加了延迟创建也不行,最终把录屏的尺寸size写死了720*1080就好了,没有用获取到屏幕的分辨率
在最后一张图中display width写死了
2.权限这一块比较麻烦也很重要不然容易导致应用崩溃
3.在1里面会出现录屏黑边的情况,直接把分辨率写成720*1600 就可以解决这个问题(根据华为运动健康来实现的)
4.在截屏里面可以获取到手机的分辨率来处理图片
20220929
在上继截屏保存里面没有保存安卓长图的
如果要实现可以用这个代码,遇到一个问题在高德地图的mapview用这个方法时显示出来的是一个黑屏,所以我采用了拼接的方式把分为上下2部分,上面还是系统的截屏然后保存到本地,下面采用上图的方法来保存,最后再拼接在一起就可以实现
这里有一个问题,就是采用系统截屏的时候会有黑边出现
getWindowManager().getDefaultDisplay().getMetrics(metrics);//原来的
替换成以下实际的分辨率就不会出现黑边了
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
图片拼接有很多方法
下面是需要注意的几点,系统截屏的时候需要设置image的高度(由你自己决定,我这里是直接通过view.getHeight()得到再传到service里面的。virtuldisplay还是需要用到屏幕的宽高,不然会异常显示)
最后用bitmap保存下来就可以了