在安卓开发中,可以通过MediaProjection API来实现屏幕投屏的功能,同时也可以通过Socket通信实现反控功能。下面将详细介绍实现步骤和注意事项。

1. 创建MediaProjectionManager对象

首先,我们需要创建一个MediaProjectionManager对象,用于管理屏幕投影。

MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

2. 获取屏幕投影的Intent并启动Activity获取投影权限

通过MediaProjectionManager.createScreenCaptureIntent()方法获取屏幕投影的Intent,并启动Activity获取投影权限。在Activity的onActivityResult()回调方法中,通过MediaProjectionManager.getMediaProjection()方法获取MediaProjection对象。

Intent intent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(intent, REQUEST_MEDIA_PROJECTION);@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_MEDIA_PROJECTION && resultCode == Activity.RESULT_OK) {mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);// ...}
}

3. 创建虚拟显示器进行屏幕投影

在Activity中,我们可以通过MediaProjection.createVirtualDisplay()方法创建一个虚拟显示器来进行屏幕投影。

ImageReader imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2);
VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay("MyScreen", width, height, dpi,DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,imageReader.getSurface(), null, handler);

4. 将虚拟显示器的输出流转换成Bitmap或者ByteBuffer对象

接下来,我们需要将虚拟显示器的输出流转换成Bitmap或者ByteBuffer对象,并使用Socket通信将数据发送给远程设备。

Image image = imageReader.acquireLatestImage();
if (image != null) {ByteBuffer buffer = image.getPlanes()[0].getBuffer();int pixelStride = image.getPlanes()[0].getPixelStride();int rowStride = image.getPlanes()[0].getRowStride();int rowPadding = rowStride - pixelStride * width;Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);bitmap.copyPixelsFromBuffer(buffer);// 将bitmap转为byte数组并发送到远程设备byte[] data = getBytesFromBitmap(bitmap);sendToRemoteDevice(data);image.close();
}

5. 接收发送数据的远程设备信息并渲染屏幕

在远程设备上,可以通过Socket通信接收发送的数据,并将数据解码成Bitmap对象。随后,将Bitmap对象渲染到屏幕上。同时,可以通过Socket通信将鼠标和键盘事件发送回到安卓设备,实现反控功能。

// 从Socket接收数据并解码成Bitmap
byte[] data = receiveFromAndroidDevice();
Bitmap bitmap = getBitmapFromData(data);// 在屏幕上渲染Bitmap
imageView.setImageBitmap

安卓开发投屏反控实现方式相关推荐

  1. Miracast投屏反控原理

    Miracast投屏反控 一. Miracast介绍 Miracast是对支持Wi-Fi Display功能设备的认证名称,也就是通过Miracast认证的设备应该都支持Wi-Fi Display功能 ...

  2. 安卓开发 投屏安卓设备到电脑端 scrcpy

    1.安装 https://www.baidu.com/link?url=4GhUcZZMdJ7VTHerpb-r-85uda5T0ZDKlG8GMFWIZFHEnb-EIAN_Ug90Dkyl3oGv ...

  3. Miracast投屏反控

    Miracast介绍 Miracast是对支持Wi-Fi Display功能设备的认证名称,也就是通过Miracast认证的设备应该都支持Wi-Fi Display功能. 缩略词以及定义 Source ...

  4. 基于Qt ffmpeg opengl开发跨平台安卓实时投屏软件

    [开源]基于Qt ffmpeg opengl开发跨平台安卓实时投屏软件 码云地址 https://gitee.com/Barryda/QtScrcpy github地址 https://github. ...

  5. php安卓苹果打开自动分开,苹果、安卓手机投屏不掉线的两种设置方式

    苹果.安卓手机投屏不掉线的两种设置方式 有用户反馈:"通过你们[AWIND奇机]的无线投屏器,手机投屏的时候,过几分钟就掉线." 经过微信视频,我们发现是该用户的手机在5分钟之后就 ...

  6. 511遇见安卓手机投屏支持一键转无线群控

    我们玩手游,投屏到电脑,提示游戏体验,还有一些APP不支持模拟器,我们可以投屏到电脑进行脚本群控操作 511遇见安卓手机投屏基本设置 软件说明 支持所有品牌的安卓手机. 支持最新的华为(Harmony ...

  7. pc投屏android软件,Scrcpy安卓电脑投屏软件下载

    Scrcpy安卓投屏软件是一款非常棒的安卓电脑投屏软件工具.这款软件可以为用户提供有线.无线两种投屏方式,用户可以方便地利用 Scrcpy 来测试 APP 应用.玩游戏.高效完成一些需要在手机上进行的 ...

  8. 安卓手机投屏软件_直播教程 | 安卓手机投屏队伍语音解决方案1

    安卓手机投屏队伍语音解决方案1 主播大大好啊! 我们之前的文章讲过安卓手机投屏到直播电脑的手游直播教程,使用台式机+投屏的方式,这样无论是游戏体验,还是直播的观看体验,都会好很多,这是也是被手游主播普 ...

  9. scrcpy设置快捷键_Scrcpy投屏控制器下载|Scrcpy(安卓手机投屏神器)附使用教程 v1.16官方版...

    Scrcpy是一款集投屏.控制为一体的手机工具,当我们的安卓手机通过WIFI.或USB连接到电脑的时候可以使用Scrcpy进行投屏,还可以对手机进行控制!非常好用的安卓手机投屏神器,最大的特点是手机无 ...

最新文章

  1. 【学习笔记】Android 图像处理
  2. altium designer 绘制pcb时漏线检查
  3. C语言实现克拉茨Collatz序列(附完整源码)
  4. 松下伺服esi文件_松下贴片机操作教程
  5. Vmware中mac snow leopard蘋果雪豹系統驅動程式安裝方法
  6. php扩展管理配置信息,PHP扩展管理 - 城市之雾的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. C# 序列化与反序列化json
  8. Linux日志管理五大命令详解
  9. resource android:attr/dialogCornerRadius not found
  10. JAVA来读取大文本文件
  11. .bash_profile .bashrc profile 文件的作用的执行顺序
  12. 从 Promise、Async/Await 、Generator等角度实现一个 sleep 函数
  13. BDF 字体文件格式
  14. Mac电脑如何添加打印机?
  15. 微信亲戚备注分组名称_微信隐藏小技巧,1分钟批量分组精准好友
  16. 校招/社招-算法岗简历及面试经验分享
  17. 分析码农骄傲自大的几点原因
  18. 陈景润定理对筛法理论的重要贡献
  19. UE5再次更新!扫描或手动建模面部模型可直接转为绑定好的Metahuman
  20. java fuoco车架_破风硬汉——JAVA FUOCO公路车 评测

热门文章

  1. ws协议与http协议的异同
  2. POWER BI 中DAX函数的应用(下篇)
  3. python代写学生作业_CS1026A留学生作业代做、代写Python实验作业、代做Python程序设计作业、代写Computer Organization作业...
  4. 网上购物,支付安全么?
  5. 把电脑设置为免费的WIFI热点
  6. 药包材国家标准ybb2020-电子版在线阅读
  7. 自定义WindowsXP时间同步服务器
  8. python和js优劣势_Python对比其他语言,在web开发中有什么优劣势?
  9. rabbitmq 心跳机制
  10. css块元素与行内元素特点,行内元素和块元素以及行内块元素的特点