Android軟件應(yīng)用經(jīng)常要求實(shí)現(xiàn)截屏和錄屏的功能,那么如何實(shí)現(xiàn)Android軟件截屏和錄屏功能呢摔竿?本文將介紹基于MediaProjection實(shí)現(xiàn)Android移動(dòng)手機(jī)截屏和錄屏功能旋膳。
MediaProjection可以用來(lái)捕捉屏幕,具體來(lái)說(shuō)可以截取當(dāng)前屏幕和錄制屏幕視頻泌神。MediaProjection由MediaProjectionManager來(lái)管理和獲取拷橘,具體使用步驟如下:
首先,獲取MediaProjectionManager萍虽,和其它的Manager一樣通過(guò)Context.getSystemService()傳入?yún)?shù)MEDIA_PROJECTION_SERVICE獲得實(shí)例睛廊。
接著,調(diào)用MediaProjectionManager.createScreenCaptureIntent()彈出dialog詢問(wèn)用戶是否授權(quán)應(yīng)用捕捉屏幕杉编,同時(shí)覆蓋onActivityResult()獲取授權(quán)結(jié)果。
如果授權(quán)成功咆霜,通過(guò)MediaProjectionManager.getMediaProjection(int resultCode,Intent resultData)獲取MediaProjection實(shí)例邓馒,通過(guò)MediaProjection.createVirtualDisplay(String name,int width,int height,int dpi,int flags,Surface surface,VirtualDisplay.Callback callback,Handler handler)創(chuàng)建VirtualDisplay實(shí)例。實(shí)際上在上述方法中傳入的surface參數(shù)蛾坯,是真正用來(lái)截屏或者錄屏的光酣。
截屏使用ImageReader類,這個(gè)類的getSurface()方法獲取到surface直接傳入MediaProjection.createVirtualDisplay()方法中脉课,此時(shí)就可以執(zhí)行截取救军。通過(guò)ImageReader.acquireLatestImage()方法即可獲取當(dāng)前屏幕的Image财异,經(jīng)過(guò)簡(jiǎn)單處理之后即可保存為Bitmap。
錄屏需要用到MediaCodec唱遭,這個(gè)類將原始的屏幕數(shù)據(jù)編碼戳寸,在通過(guò)MediaMuxer封裝成MP4格式保存。MediaCodec.createInputSurface()獲取一個(gè)surface對(duì)象傳入MediaProjection.createVirtualDisplay()即可獲取屏幕原始多媒體數(shù)據(jù)拷泽,之后讀取MediaCodec編碼輸出數(shù)據(jù)經(jīng)過(guò)MediaMuxer封裝處理MP4即可播放疫鹊,實(shí)現(xiàn)錄屏。