基於MediaProjection實現Android移動手機截圖和錄屏功能
Android軟體應用經常要求實現截圖和錄屏的功能,那麼如何實現Android軟體截圖和錄屏功能呢?本文將介紹基於MediaProjection實現Android移動手機截圖和錄屏功能。
MediaProjection可以用來捕捉螢幕,具體來說可以擷取當前螢幕和錄製螢幕視訊。MediaProjection由MediaProjectionManager來管理和獲取,具體使用步驟如下:

程式碼功能
首先,獲取MediaProjectionManager,和其它的Manager一樣通過Context.getSystemService()傳入引數MEDIA_PROJECTION_SERVICE獲得例項。
接著,呼叫MediaProjectionManager.createScreenCaptureIntent()彈出dialog詢問使用者是否授權應用捕捉螢幕,同時覆蓋onActivityResult()獲取授權結果。
如果授權成功,通過MediaProjectionManager.getMediaProjection(int resultCode,Intent resultData)獲取MediaProjection例項,通過MediaProjection.createVirtualDisplay(String name,int width,int height,int dpi,int flags,Surface surface,VirtualDisplay.Callback callback,Handler handler)建立VirtualDisplay例項。實際上在上述方法中傳入的surface引數,是真正用來截圖或者錄屏的。
截圖使用ImageReader類,這個類的getSurface()方法獲取到surface直接傳入MediaProjection.createVirtualDisplay()方法中,此時就可以執行擷取。通過ImageReader.acquireLatestImage()方法即可獲取當前螢幕的Image,經過簡單處理之後即可儲存為Bitmap。
錄屏需要用到MediaCodec,這個類將原始的螢幕資料編碼,在通過MediaMuxer封裝成MP4格式儲存。MediaCodec.createInputSurface()獲取一個surface物件傳入MediaProjection.createVirtualDisplay()即可獲取螢幕原始多媒體資料,之後讀取MediaCodec編碼輸出資料經過MediaMuxer封裝處理MP4即可播放,實現錄屏。