日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android】手机端的投射

發布時間:2024/4/14 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android】手机端的投射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

其實手機本來就有這樣一個功能,android叫投射屏幕,ios叫AirPlay。android的投射屏幕,只能是整張屏,不能自定義區域;
AirPlay的技術不夠成熟,經常找不到設備。有點跑題,主旨是下面要實現和上面提到的類似效果的一種方式,無意吐槽。

同樣是工作需要,需要實現這樣一種效果。我的思路是截取視圖區域,建立Socket,發送字節流。

代碼如下:

private?Button?btn; private?int?count?=?0;private?Timer?btnTimer?=?null;private?Timer?cutTimer?=?null;private?Socket?socket?=?null; @Overrideprotected?void?onCreate(Bundle?savedInstanceState)?{super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn?=?(Button)?findViewById(R.id.main_btn);btn.setOnClickListener(new?View.OnClickListener()?{@Overridepublic?void?onClick(View?v)?{if(btnTimer==null){btnTimer?=?new?Timer();btnTimer.schedule(new?TimerTask()?{@Overridepublic?void?run()?{handler.sendEmptyMessage(0);}},?0,1000/100);projection(btn);}else?{cutTimer.cancel();cutTimer?=?null;btnTimer.cancel();btnTimer?=null;if(socket!=null){try?{socket.close();}?catch?(IOException?e)?{e.printStackTrace();}finally{socket?=?null;}}}}});}

一些包裝類:

/*?/***?投影View視圖*?@param?view*/public?void?projection(final?View?view){new?Thread()?{public?void?run()?{try?{cutTimer?=?new?Timer();TimerTask?task?=?new?TimerTask()?{@Overridepublic?void?run()?{try?{//這里有問題!(應該保持一個socket)服務器端?沒有想到好的識別文件結尾的方法?所以使用了一幀一個連接socket?=?new?Socket("192.168.5.159",?5000);sendBitmap(socket,printScreen(view));}?catch?(Exception?e)?{e.printStackTrace();}}};//1秒10幀cutTimer.schedule(task,?0,?1000/10);}?catch?(Exception?e)?{e.printStackTrace();}};}.start();}/***?截取decorView視圖區域的屏幕顯示*?@param?decorView*?@return*/public?Bitmap?printScreen(View?decorView)?{decorView.setDrawingCacheEnabled(true);decorView.buildDrawingCache();//可以不寫,getDrawingCache()時會調用該方法return?decorView.getDrawingCache();};/***?向服務器發送圖片字節流*?@param?socket*?@param?bitmap*?@throws?Exception*/public?void?sendBitmap(Socket?socket,Bitmap?bitmap)?throws?Exception?{ByteArrayOutputStream?bitout?=?new?ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG,?100,?bitout);DataOutputStream?out?=?new?DataOutputStream(socket.getOutputStream());out.write(bitout.toByteArray());out.flush();out.close();}

服務器端應該就是ServerSocket 解析出圖片,依然,我不管服務器端,簡單寫了如下測試代碼

public?class?SocketServer?{public?static?void?main(String[]?args)?throws?Exception?{Socket?socket?=?null;ServerSocket?serverSocket?=?new?ServerSocket(5000);for?(int?i?=?0;;?i++)?{socket?=?serverSocket.accept();DataInputStream?in?=?new?DataInputStream(socket.getInputStream());//應該顯示出去??這里做測試生成了文件FileOutputStream?out?=?new?FileOutputStream(new?File("D://cut_"?+?i+?".jpg"));byte[]?buf?=?new?byte[1024];int?len?=?0;while?((len?=?in.read(buf))?!=?-1)?{//如果要使用一個socket的話,應該加入判斷??解析出每一個文件out.write(buf,?0,?len);}out.flush();out.close();}} }

大致如此,個人想法,可能有好的解決方案,洗耳恭聽。

轉載于:https://my.oschina.net/u/1422723/blog/395853

總結

以上是生活随笔為你收集整理的【Android】手机端的投射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。