使用MediaProjectionManager,VirtualDisplay,AudioRecord,MediaCodec以及MediaMuxer等API实现屏幕录制功能。MediaProjectionManager是Android5.0出现的API,但是现在已经Android十几了,尤其Android10对隐私保护真的做的很多事情啊!获取屏幕必须要foreground service绑定显式通知;mediaProjection必须要在通知显示之后获取;文件结构也重新设计了,不能随意创建文件夹了,系统提供了一些可用的文件夹,保存在Android/data/包名路径下。
在Android12的手机上写了个截屏、录屏的项目,遇到各种问题,解决完各种报错,终于运行起来了,先来看看效果吧!
AndroidManifest权限配置
//截屏
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
//录屏,录屏需要保存视频文件和获取声音
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
AndroidManifest配置ScreenService
<service android:name=".ScreenService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="mediaProjection"/>
Activity获取MediaProjectionManager
projectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
Activity绑定ScreenService
@Override