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】手机端的投射相关推荐

  1. 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )

    文章目录 安卓直播推流专栏博客总结 一. 服务器搭建 二. 手机端推流 三. 电脑端观看直播 四. RTMP 服务器端状态 安卓直播推流专栏博客总结 Android RTMP 直播推流技术专栏 : 0 ...

  2. 基于Java的TCP Socket通信详解(计算机端/Android手机端)

    TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代 ...

  3. agx 安装ros opencv_(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...

    通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开发.s ...

  4. SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...

    SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建--5.Android手机端与robot端ROS网络通信 摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整 ...

  5. android 摄像头测血压,基于Android手机端的连续血压测量系统和校准测量方法

    基于Android手机端的连续血压测量系统和校准测量方法 [技术领域] [0001]本发明涉及血压连续测量技术领域,具体设计一种基于Android手机端的连续血压测量系统和校准测量方法,被测者可以直接 ...

  6. 一对一视频聊天app源码,Android手机端创建文件并输入内容

    一对一视频聊天app源码,Android手机端创建文件并输入内容实现的相关代码 1.在AndroidManifest.xml添加权限 <uses-permission android:name= ...

  7. Android手机端无人机地面站2.0版本 2021-07-30

    这里写自定义目录标题 Android手机端无人机地面站2.0版本 Android手机端无人机地面站2.0版本 地面站2.0版本主要做了以下改进: 1.添加了无人机的运动仿真功能(本人一行代码一行代码敲 ...

  8. Android手机端无人机地面站源码

    Android手机端无人机地面站开发(Mavlink.Client/Server) 摘要:本人基于Android Studio和eclipse开发工具,用Java开发了一款Android手机端无人机地 ...

  9. Android手机端编程开发软件合集(一)

    [2022-05-14链接已更新]在网上搜索了很久才找到的编程IDE高级解锁版, 在这里记录并分享一下吧! 一.合集地址: 蓝奏云:https://huanxingke.lanzoux.com/b02 ...

  10. 4、Android 手机端进行实时目标检测,并使用FFMPEG将检测的视频流推到服务器显示

    基本思想:记录一下上次工业检测项目的Android推流代码,客户要求在终端检测结果推到服务器上,以最大化发挥终端的算力,而把服务器只当做中转站~ 一.先将up的GitHub - nihui/ncnn- ...

最新文章

  1. Android自定义ListView的Item无法响应OnItemClick的解决办法
  2. 腾讯提超强少样本目标检测算法,公开1000类检测训练集FSOD | CVPR 2020
  3. 智慧农业物联网云平台方案
  4. 嵌入式环境:挂载开发板根NFS文件系统失败
  5. spring AOP策略模式使用
  6. cad常用字体_2300多种CAD字体免费送给你!绘图必备,一键解决你的CAD文字乱码问题...
  7. 以Post方式发送数据采用WebClient
  8. OpenCV创建小部件Creating Widgets
  9. leetcode 150. 逆波兰表达式求值(栈)
  10. hbase shell远程连接_HBase安装详解
  11. RDD 常见Action算子入门及应用
  12. linux卸载keystone服务,OpenStack —— 认证服务Keystone(二)
  13. uniapp开发原生android插件,获取浏览器cookie
  14. 会解方程会画图的超级计算器
  15. (原)Opencv中直方图均衡和图像动态范围拉伸的代码
  16. CSIG图像图形技术挑战赛重磅来袭!人体目标检测分赛道正式开放注册!
  17. 计算机毕业设计安卓App毕设项目之springboot+合同管理APPNodejs毕业设计计算机项目源码
  18. 软考中级软件设计师--9.计算机网络
  19. warning: #546-D: transfer of control bypasses initialization
  20. 复旦大学计算机系杨希希,复旦大学研究生招生信息网_复旦大学考研信息网-研究生招生报名查询系统...

热门文章

  1. 反汇编学习笔记2 函数的本质
  2. C++数组(一维、二维、三维)的动态分配new、初始化memset和释放delete
  3. Spring AOP(一):概览
  4. rpm(centos)软件包管理工具
  5. 《计算机网络》读书笔记(一)--计算机网络体系结构
  6. 高仿微信对话列表滑动删除效果
  7. spring cloud 微服务相关信息
  8. UOJ #592. 投放点的选择
  9. Java泛型总结---基本用法,类型限定,通配符,类型擦除
  10. [贪心][前缀和] Jzoj P4256 平均数