【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机

【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机

dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆),可以在浏览器和node.js、deno、electron上运行,它是一个跨平台的软件,支持多个操作系统使用!

dtns.connector是dtns.network的客户端软件,允许多用户方便自由地连接dtns.network的智体设备。支持使用内置的poplang智体编程语言实现3D组件的智能化编程——语法超简单,一句话语法,人人轻松上手!通过poplang智体编程,可轻松创建、编辑、分发xverse-3D智体应用。

本次更新的内容为:rtphone实时分布式安卓设备远程访问和实时控制(基于dtns-rtpc-api和dtns.dpkg插件机制——插件包仅11kb大小,大大增强了远程访问和管理安卓设备的能力)!

更新内容

1、使用dpkg机制,集成dtns-rtphone-api,开发了rtphone分布式远程访问和实时控制的DPKG插件rtpc1.3.dpkg(dtns.top官网下载)

2、rtphone暂时支持屏幕同步功能、点击功能(亦可点击输入框唤醒键盘输入功能)

3、支持访问内网算力设备,主要是依赖于dtns-api来进行访问(分布式设备终端远程访问),可取代大部分的代理访问机制。

4、可方便集成到了dtns.os的系统应用面板中。

5、可使用poplang调用dtns-rtphone-api,实现安卓操作系统的机器人(详见过往文章)

完全开源:rtphone开源、dtns.os和dtns.network等项目均开源。详见文末、或访问dtns.top智体OS官网。

使用教程

一、打开dtns.connector的dweb头榜界面,点击上传了的rtphone1.3.dpkg(或任意其它最新版本)

1.png

二、进入rtphone远程访问和实时管理插件,可以看到最新的手机屏幕内容(这里查看的是时钟应用的界面——手机已经打开该应用)

2.png

三、点击右上角的“同步”,可实现手机屏幕显示内容进行实时同步

3.png

四、可以看到秒表的时间实时变化,点击右上角可停止同步更新(受限于adb截屏速度,2秒钟完成一次屏幕内容的同步刷新)

4.png

五、可点击下方的暂停按钮,实现对该应用的远程控制(大部分应用均可方便远程控制)

5.png

六、点击切换至闹钟主界面

6.png

rtphone1.3.dpkg的源码分享

/* eslint-disable */
<!--* @Description: RtPhoneClient* @Author: poplang* @Date: 2024-12-6* @LastEditors: * @LastEditTime:--><template><div style="width: 100%;height: 100%;padding:0px;margin: 0px;" ><div @click="back" style="color:black;position: fixed;left:8px;top:8px;z-index: 399;"> ❮返回 </div><div style="color:black;position: fixed;left:0;right:0;top:8px;z-index: 359;text-align: center;  font-size: 18px;font-weight: 800;">{{ title }}</div><div  style="color:black;position: fixed;right:8px;top:8px;z-index: 399;"><span @click="goBack" style="margin-right: 8px">back</span><span @click="goMenu" style="margin-right: 8px">menu</span><span @click="goHome" style="margin-right: 8px">home</span><span @click="syncScreen" style="margin-right: 8px">{{ syncScreenTips }}</span><!-- <span @click="queryScreen">刷新</span> --></div><!-- <div style="color:red;position: fixed;right:8px;top:8px;z-index: 399;"><b>[分数] {{ top_cnt }} : {{ success_cnt  }}</b></div> --><!-- <div v-show="showInput" style="position: fixed;z-index: 199; display:flex;bottom: 5px;left:0;right: 0;height: auto;text-align: center;margin-bottom: 2px;padding:0px 10px 0px 10px;"><input @keydown.enter="keyDown" style="width:100%; height:28px; padding-left:5px; border:1px solid #eeeeee; font-size:13px;" v-model="msg" /><button @click="send" style="color: rgb(255, 255, 255);width:70px;border-radius: 0px; font-size: 13px; height: 28px; background-color: rgb(18, 173, 245); border: none;">发送</button></div> --><div style="position:fixed;top: 50px;bottom: 0px;left: 0px;right: 0px;z-index: 9;overflow-x: auto;overflow-y: auto;"><img :src="base64" style="width: auto;height: auto;" @mousedown="mousedown"/></div></div></template><script>export default {name: "RtPhoneClient",props: ["value"],components: {  },data() {return {title:'RtPhone客户端',// showInput:false,base64:null,// syncScreenId:0,syncScreenNowFlag:false,syncScreenTips:'同步',syncScreenTipsStart:'同步',syncScreenTipsStop:'停止',}},async created(){this.user_id = localStorage.user_id//   setInterval(this.queryScreen,10000)},mounted(){this.queryScreen()},beforeRouteLeave(to,from,next){// if(this.syncScreenId) clearInterval(this.syncScreenId)this.stopSyncScreen()console.log('into beforeRouteLeave')next();},methods: {back(){this.stopSyncScreen()this.$router.go(-1)},async goBack(){if(this.click_event_now_flag) console.log('this.click_event_now_flag is true')if(typeof g_dtnsManager =='undefined') return falsethis.click_event_now_flag = truelet ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 4 '})//,click:trueif(!ret || !ret.ret) g_dchatManager.viewContext.$toast('点击失败,原因:'+(ret ? ret.msg:'未知网络原因'))await new Promise((res)=>setTimeout(res,100))this.click_event_now_flag = false},async goHome(){if(this.click_event_now_flag) console.log('this.click_event_now_flag is true')if(typeof g_dtnsManager =='undefined') return falsethis.click_event_now_flag = truelet ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 3 '})//,click:trueif(!ret || !ret.ret) g_dchatManager.viewContext.$toast('点击失败,原因:'+(ret ? ret.msg:'未知网络原因'))await new Promise((res)=>setTimeout(res,100))this.click_event_now_flag = false},async goMenu(){if(this.click_event_now_flag) console.log('this.click_event_now_flag is true')if(typeof g_dtnsManager =='undefined') return falsethis.click_event_now_flag = truelet ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 82 '})//,click:trueif(!ret || !ret.ret) g_dchatManager.viewContext.$toast('点击失败,原因:'+(ret ? ret.msg:'未知网络原因'))await new Promise((res)=>setTimeout(res,100))this.click_event_now_flag = false},stopSyncScreen(){if(this.syncScreenNowFlag){// clearInterval(this.syncScreenId)this.syncScreenNowFlag = falsethis.syncScreenTips = this.syncScreenTipsStart}},async syncScreen(){if(this.syncScreenNowFlag) return this.stopSyncScreen()this.syncScreenNowFlag = true//setInterval(this.queryScreen,5000)this.syncScreenTips = this.syncScreenTipsStopwhile(this.syncScreenNowFlag){await this.queryScreen() //得到查询结果(可能1-15s完成600kb的png截图下载)await new Promise((res)=>setTimeout(res,100))}},async queryScreen(){if(typeof g_dtnsManager =='undefined') return falselet ret =  await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/screencap',{f:'webp',q:10})if(ret && ret.ret) this.base64 = ret.base64else console.log('query-screen-ret:',ret)},async mousedown(e){if(this.click_event_now_flag) console.log('this.click_event_now_flag is true')console.log('RtPhoneClient.vue mousedown-event:',e)let x = e.offsetX , y = e.offsetY//e.layerX, y = e.layerY//e.clientX, y = e.clientYif(typeof g_dtnsManager =='undefined') return falsethis.click_event_now_flag = truelet ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input tap '+x+' '+y})//,click:trueif(!ret || !ret.ret) g_dchatManager.viewContext.$toast('点击失败,原因:'+(ret ? ret.msg:'未知网络原因'))await new Promise((res)=>setTimeout(res,100))this.click_event_now_flag = false},send(){},keyDown(){}}}</script>
<style scoped>
</style>

注:我们看到,基于dtns-api(封装为g_dtnsManager客户端js-SDK),可以轻松地访问dtns-rtphone-api,从而实现安卓的远程访问和控制。功能强大,但开发极简。并且支持使用poplang开发各种各样的视觉智能机器人(安卓手机控制),实现任意的业务流引擎的快速定制。

总结:dtns-rtpc-api,结合dtns.connector上的DPKG插件机制,3d-agent智体应用开发语言poplang,可以在极短时间内做出强大的智体应用3.0(agent)用于智能安卓手机控制。进一步拓展了智体OS的分布式智能的适用领域(例如智能家电、服务机器人等等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35390.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue智慧商城项目

创建项目 vue组件库 — vant-ui&#xff08;常用于移动端&#xff09; Vant 2 - 轻量、可靠的移动端组件库 安装vant npm i vantlatest-v2 -S 引入组件 按需导入和全部导入 全部导入 整个组件库的所有组件都导进来&#xff0c;缺点是增加了代码包体积 main.js import…

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代&#xff0c;提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步&#xff0c;为搜索引擎优化&#xff08;SEO&#xff09;提供了强有力的支持&#xff0c;尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁&#xff0c;其…

以MP6924A为核心的LLC拓扑学习【一】

PFCLLC: 在PFC&#xff08;功率因数校正&#xff09;和LLC&#xff08;谐振变换器&#xff09;组成的电源系统中&#xff0c;各个电路有特定的作用&#xff0c;它们协同工作以实现高效率和高功率因数的电能转换。 1. PFC&#xff08;功率因数校正&#xff09;电路的作用 PFC电…

实践教程|Transformer Decoder-Only 模型批量生成 Trick

导读 本文给出了一个用单Transformer decoder&#xff08; GPT&#xff09;模型进行批量生成时的解决方法。 发现用单 Transformer decoder &#xff08;Aka GPT&#xff09;模型进行生成时&#xff0c;因为位置对齐等问题&#xff0c;进行批量生成时十分麻烦。 训练时&#…

DevExpress WPF v24.2新功能预览 - 键盘导航和屏幕阅读器功能增强

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象&#xff0c;显示这个相机的视锥。 想要在场景里面显示相机的视锥&#xff0c;需要创建两个相机。 举个例子&#xff0c;场景中有个相机A&#xff0c;想要显示相机A的视锥&#xff0c;那么需要一个相机B&#xff0c;把B放在A的后面&#xff0c;两个…

财务规划的变革:如何推动数据科学的转型和分析

在快速发展的金融世界中&#xff0c;财务专业人士越来越需要超越传统预算方式的数据分析方法&#xff0c;将现代化的预算技术、工具和方法引入到我们的企业发展过程中&#xff0c;并在企业内部发挥更具战略性的作用。数据科学、财务预测和预算分析是企业财务领域成功所必需的核…

PyTorch环境迁移指南

在进行深度学习研究和开发时,我们经常需要在不同计算机之间迁移PyTorch环境。无论是更换新设备还是在多台机器间协同工作,都需要确保环境配置的一致性。本文将详细介绍PyTorch环境迁移的完整流程和注意事项。 环境迁移看似简单,实则暗藏玄机。直接复制文件可能会遇到系统差异带…

深信服ATRUST与锐捷交换机端口链路聚合的配置

深信服ATRUST业务口原来只配置使用一个电口&#xff0c;近期出现流量达到800-900M接近端口的极限带宽。由于设备没有万光口&#xff0c;于是只好用2个光口来配置链接聚合。 下需附上深信服ATRST端口配置的截图&#xff0c;由于深信服ATRUST与锐捷交换机端口只共同支持源mac目的…

WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。

新建EXCLE文件 另存为xlsm格式的文件 先打开WPS的开发工具中的宏编辑器 宏编辑器编译环境 在工作区添加函数并编译&#xff0c;如果有错误会有弹窗提示&#xff0c;如果没有错误则不会弹 函数名字 ”HEXTOFLOAT“ 可以自己修改。 function HEXTOFLOAT(hex) { // 将十六…

亚马逊云服务器Amazon EC2

一、什么是Amazon EC2&#xff1f; Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services (AWS) 云中提供按需、可扩展的计算容量。使用 Amazon EC2 可降低硬件成本&#xff0c;让您能够更快地开发和部署应用程序。您可以使用 Amazon EC2 启动任意数量的虚拟服务…

1688:开启跨境电商新篇章

引言 在全球化贸易不断深化的今天&#xff0c;跨境电商已成为中小企业拓展国际市场的重要渠道。1688&#xff0c;作为阿里巴巴集团旗下领先的内贸平台&#xff0c;近年来也逐渐发力跨境电商领域&#xff0c;为全球买家提供了一个直通中国工厂的贸易平台。本文将带您深入了解16…

ES使用script进行复杂排序

es数据字段&#xff0c;关注_source内容&#xff0c;为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…

Leecode刷题C语言之可以被进一步捕获的棋子数

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int numRookCaptures(char** board, int boardSize, int* boardColSize) {int cnt 0, st 0, ed 0;int dx[4] {0, 1, 0, -1};int dy[4] {1, 0, -1, 0};for (int i 0; i < 8; i) {for (int j…

攻防世界杂项刷题笔记(引导模式)13-23

引言&#xff1a;14包括提取文件和流量分析&#xff0c;22很新颖&#xff01;&#xff01;其他的都是常规隐写 13.base64stego 经过上一次如来十三掌的磨练&#xff0c;这题在看到题干“十三掌”的时候我是丝毫不慌张的。附件给了压缩包&#xff0c;考虑是不是伪加密&#xf…

Linux-PWM应用编程

本章我们将学习如何对开发板上的 PWM 设备进行应用编程。 本章将会讨论如下主题内容。 ⚫ 应用层 PWM 编程介绍&#xff1b; ⚫ PWM 测试。 应用层如何操控 PWM 与 LED 设备一样&#xff0c;PWM 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/pwm 目录下&…

Seaborn | 绘制数据分布的两个函数distplot和countplot

distplot 和 countplot 是 seaborn&#xff08;Seaborn&#xff09;库中用于绘制数据分布的两个函数&#xff0c;它们各自有不同的用途和特点&#xff1a; 1. distplot&#xff08;分布图&#xff09; distplot 函数用于绘制单变量的分布图。它可以显示数据的直方图&#xff…

网络原理 网络协议栈

POSIX API与网络协议栈 unix有不同的衍生版本&#xff0c;针对不同的版本&#xff0c;通过Posix定义了一套标准的操作系统接口API&#xff0c;使得不同的开发版本可以使用相同的API调用&#xff0c;具有可移植性。 网络连接相关API&#xff1a; 客户端 socket() bind() con…

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析&#xff1f; 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类&#xff0c;使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…

【华科X地平线】DiffusionDrive:端到端截断扩散模型

论文: https://arxiv.org/pdf/2411.14499 代码: https://github.com/hustvl/DiffusionDrive 0. 摘要 最近&#xff0c;扩散模型作为一种强大的生成式技术&#xff0c;已经出现在机器人策略学习领域&#xff0c;能够建模多模态动作分布。利用其进行端到端自动驾驶的能力是一个…