記錄原因
- Android端實現錄屏功能非常簡單.詳情可以參考Android實現錄屏直播(一)ScreenRecorder的簡單分析
- 這篇文章主要介紹瞭如何用Unity調用Android實現錄屏. 難點在於之前沒作用,不理解. 當實現了之後發現還挺簡單的.
普通Android程序實現錄屏
- ActivityT1正常情況下爲我們的MainActivity。
- ActivityT2爲錄屏申請的系統會自己去調用的Activity,不可見。那麼很快T2就自己結束掉了,finish後會調用T1的OnActivityResult
- 一般情況下就是在這個回調函數中,我們獲得了MediaProjection,它在屏幕刷新時,我們將獲得屏幕是Surface,接着使用MediaCodec進行編碼寫文件。
而這樣在Unity實現的時候就出現了問題.
原因在於我們的MainActivity繼承了Unity的Activity,這個父類實現了自己的OnActivityResult回調,進行了自己的一些處理,導致無法進入MainActivity中的回調。
Unity-Android實現錄屏
所以更新了一下實現方式:
- Unity調用Android. 但是MainActivity不直接申請錄屏的權限.
- 而是啓動一個新的Activity去申請錄屏啓動.然後通過T1的OnActivityResult獲得結果.
其中的難點就是一開始不知道存在的這些問題。真正實現起來還算簡單。
關鍵的幾個點:
1)Unity-Android調用;
2)Android的MainActivity要使用Unity傳入的上下文;
3)ActivityT1這個子Activity配置問題,如去掉UI等。
通過以上的方法,成功實現了Unity-Android錄屏。
參考文檔
【1】 Using a child activity to wait for onActivityResult with Unity3D
【2】 unity-android-plugins-and-onactivityresult-callback