【智体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(或任意其它最新版本)

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

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

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

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

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

rtphone1.3.dpkg的源码分享
javascript 复制代码
/* 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 false
          this.click_event_now_flag = true
          let ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 4 '})//,click:true
          if(!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 false
          this.click_event_now_flag = true
          let ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 3 '})//,click:true
          if(!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 false
          this.click_event_now_flag = true
          let ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input keyevent 82 '})//,click:true
          if(!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 = false
            this.syncScreenTips = this.syncScreenTipsStart
          }
        },
        async syncScreen()
        {
          if(this.syncScreenNowFlag) return this.stopSyncScreen()
          this.syncScreenNowFlag = true//setInterval(this.queryScreen,5000)
          this.syncScreenTips = this.syncScreenTipsStop
          while(this.syncScreenNowFlag)
          {
            await this.queryScreen() //得到查询结果(可能1-15s完成600kb的png截图下载)
            await new Promise((res)=>setTimeout(res,100))
          }
        },
        async queryScreen()
        {
            if(typeof g_dtnsManager =='undefined') return false
            let ret =  await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/screencap',{f:'webp',q:10})
            if(ret && ret.ret) this.base64 = ret.base64
            else 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.clientY
            if(typeof g_dtnsManager =='undefined') return false
            this.click_event_now_flag = true
            let ret = await g_dtnsManager.run('dtns://web3:'+rpc_client.roomid+'/rtphone/robot/do',{action:' shell input tap '+x+' '+y})//,click:true
            if(!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的分布式智能的适用领域(例如智能家电、服务机器人等等)。

相关推荐
小鸡吃米…11 分钟前
机器学习 - K - 中心聚类
人工智能·机器学习·聚类
一 乐41 分钟前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
好奇龙猫1 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)1 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
minhuan1 小时前
大模型应用:大模型越大越好?模型参数量与效果的边际效益分析.51
人工智能·大模型参数评估·边际效益分析·大模型参数选择
Cherry的跨界思维1 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS1 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
C_心欲无痕1 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫1 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
ASF1231415sd1 小时前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪