android開發之局域網內屏幕共享+提取文字01:截屏

一、理由
1、起因:因爲疫情的原因,導致自己在家上網課,而學習興趣不大,所以搞一些小玩意來提供自己的學習的興趣和鍛鍊下自己,就做了up主,(有興趣的朋友可以關注下我:算個法)。由學習通的線上考試,自己想到了一個奇妙的方法來應付學習通的線上考試,那就是用兩部手機來作弊,一部作爲客戶端,分享屏幕,一部作爲服務端,接受屏幕和提取屏幕的文字(最初可能有點作弊的想法,最後就沒有了,期末還是好好複習好,這博客只是爲了交流技術,不是作弊)。
2、經過:之後就網上亂找資源,最後在一位博主的指導下完成了該小玩意(博主賬號:Android唐浮),最後謝謝博主的幫忙。
3、結果:
服務端
客戶端
客戶端有缺點,就是隻能用一次,點擊停止服務後會出現anr,不知道爲什麼,解決了朋友望告知(目測應該是我在循環中一直創造新變量的原因)
二、方法
就是客戶端不斷截屏,通過socket發送給服務端,服務器通過百度OCR(文字識別)獲取文字。
三、截屏的實現
1、類和方法
①、獲得屏幕的參數
類:WindowManager或者方法:getResources()
兩者區別鏈接
②、得到surface(手機屏幕)類
MediaProjectionManage
MediaProjection
ImageReader (ImageReader是截屏的,如果要錄屏用 MediaRecord)
VirtualDisplay
③文件的類
File、FileOutputStream、FileOutputStream
④ImageReader 中的surface轉換爲Bitmap類
ImageReader ,image,Bitmap
2、權限

//讀寫磁盤
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    //記錄權限,錄屏
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    //獲得系統情況
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        //寫其他外存
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  

3、步驟(詳細看代碼)
①初始化一個MediaProjectionManager
②創建並啓動Intent
③在onActivityResult中拿到MediaProjection所需數據,並創建MediaProjection
④創建ImageReader類,爲了之後接受surface
⑤創建VirtualDisplay,給ImageReader surface
⑥ImageReader裝換爲Bitmap
⑦Bitmap存儲在文件中
4、代碼問題
就是不能一直錄屏,容易出現anr問題
四、源碼
五、第一次做項目,發現一個學習方法
源碼+官方文檔(知道源碼的類後去查文檔)
一直做項目很累,貴在堅持
參考資料:
兩個類實現Android錄製屏幕功能
Android截屏、錄屏工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章