网站建设纯免费官网太原seo推广优化

web/2025/10/4 12:00:46/文章来源:
网站建设纯免费官网,太原seo推广优化,百姓网租房,赣州微信公众号制作在手机侧与穿戴设备侧构建应用到应用的通信隧道#xff0c;用于收发应用自定义的报文消息以及文件。实现手机应用和穿戴设备应用间的交互#xff0c;为用户提供分布式场景和体验。比如手机应用发送音频文件到穿戴设备侧应用#xff0c;实现在穿戴设备侧应用上播放音乐#…在手机侧与穿戴设备侧构建应用到应用的通信隧道用于收发应用自定义的报文消息以及文件。实现手机应用和穿戴设备应用间的交互为用户提供分布式场景和体验。比如手机应用发送音频文件到穿戴设备侧应用实现在穿戴设备侧应用上播放音乐手机应用发送暂停指令实现穿戴设备音乐播放暂停等。 收发点对点消息前需要确保应用已在开发者联盟申请获取设备基础信息权限权限否则接口将调用失败。 说明 使用该功能前请确保穿戴设备支持应用安装能力同时穿戴设备侧已有对应的应用。 手机App和穿戴设备App必须同时处于启动状态。当手机App启动且穿戴设备App没有启动时手机App可以通过[startRemoteApp]方法拉起穿戴设备App。 手机侧应用检测穿戴设备侧应用是否安装 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。 参见[查询可用穿戴设备]章节获取已连接设备列表。参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[isRemoteAppInstalled]方法查看是否安装指定的设备应用。 // 将设备侧应用包名定义为remoteBundleName let remoteBundleName: string ;// 步骤3 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤4 查看是否安装指定的设备侧应用 p2pClient.isRemoteAppInstalled(targetDevice.randomId, remoteBundleName).then((isInstall) {console.info(Succeeded in checking remote app install, result is ${isInstall}.); }).catch((error: BusinessError) {console.error(Failed to check remote app install. Code is ${error.code}, message is ${error.message}.); })手机侧应用获取穿戴设备侧应用的版本号 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。 参见[查询可用穿戴设备]章节获取已连接设备列表。参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[getRemoteAppVersion]方法获取指定设备对应的应用版本号。 // 将设备侧应用包名定义为remoteBundleName let remoteBundleName: string ;// 步骤3 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤4 获取指定设备对应的应用版本号 p2pClient.getRemoteAppVersion(targetDevice.randomId, remoteBundleName).then((version) {console.info(Succeeded in getting remote app version, version is ${version}.); }).catch((error: BusinessError) {console.error(Failed to check get remote app version. Code is ${error.code}, message is ${error.message}.); })手机侧应用拉起设备侧应用 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。 在发送点对点消息前可以用[startRemoteApp]方法拉起设备侧应用。 参见[查询可用穿戴设备]章节获取已连接设备列表。 参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[startRemoteApp]方法指定需要拉起设备侧应用包名。[transformLocalBundleName]默认值为false传入为true时wearEnigne会将本地的应用包名和指纹转换为兼容应用在云侧存储的包名和指纹。 // 将设备侧应用包名定义为remoteBundleName let remoteBundleName: string ;// 步骤3 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤4 拉起设备侧指定应用(transformLocalBundleName不传入参数默认为false) p2pClient.startRemoteApp(targetDevice.randomId, remoteBundleName).then((p2pResult) {console.info(Succeeded in starting remote app, result is ${p2pResult.code}.); }).catch((error: BusinessError) {console.error(Failed to start remote app. Code is ${error.code}, message is ${error.message}.); })手机侧应用发送点对点消息或文件到穿戴设备侧应用 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。 消息长度大小的限制为4096字节。针对消息长度超过限制的情况可以采用发送文件文件大小不超过100MB的方式或进行消息分包控制。 手机侧实现发送消息和文件功能后穿戴设备侧应用需要对应实现接收消息和文件的功能。 发送点对点消息 为了使用工具类构造消息体请先导入所需模块。 import { util } from kit.ArkTS;参见[查询可用穿戴设备]章节获取已连接设备列表。参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。构造设备侧应用参数[P2pAppParam]。构造需要发送的消息[P2pMessage]。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[sendMessage]方法从手机上的应用发送简短消息到穿戴设备侧对应的应用。设备侧已注册监听消息接收后即可收到手机发送的消息。 // 步骤3 构造设备侧应用参数 let appInfo: wearEngine.AppInfo {// 设置设备侧应用的应用信息包名与指纹bundleName: ,fingerprint: } let appParam: wearEngine.P2pAppParam {remoteApp: appInfo// transformLocalAppInfo默认为false不转换包名指纹 }// 设置需要发送的消息内容长度限制为4096字节 let messageContent: string this is message;// 步骤4 构造消息结构体 let textEncoder: util.TextEncoder new util.TextEncoder; let message: wearEngine.P2pMessage {content: textEncoder.encodeInto(messageContent) }// 步骤5 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤6 发送消息 p2pClient.sendMessage(targetDevice.randomId, appParam, message).then((p2pResult) {console.info(Succeeded in sending message, result is ${p2pResult.code}.); }).catch((error: BusinessError) {console.error(Failed to send message. Code is ${error.code}, message is ${error.message}.); })发送文件 为能正确打开文件描述符请先导入模块。 import { fileIo } from kit.CoreFileKit;参见[查询可用穿戴设备]章节获取已连接设备列表。参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。构造设备侧应用参数[P2pAppParam]。 根据文件路径filePath构造需要发送的文件[P2pFile]。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[transferFile]方法从手机上的应用发送文件到穿戴设备侧对应的应用。 // 步骤3 构造设备侧应用参数 let appInfo: wearEngine.AppInfo {// 设置设备侧应用的应用信息包名与指纹bundleName: ,fingerprint: } let appParam: wearEngine.P2pAppParam {remoteApp: appInfo// transformLocalAppInfo默认为false不转换包名指纹 }// 步骤4 构造需要发送的文件 let p2pfile: wearEngine.P2pFile {// 设置需要发送的文件路径其中不能包含..file: fileIo.openSync() }// 步骤5 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤6 发送指定文件至设备 p2pClient.transferFile(targetDevice.randomId, appParam, p2pfile, (error: BusinessError, p2pResult: wearEngine.P2pResult) {// callback处理逻辑if (error) {console.error(Failed to transfer file. Code is ${error.code}, message is ${error.message}.);return;}if (p2pResult.code) {if (p2pResult.code wearEngine.P2pResultCode.COMMUNICATION_SUCCESS) {console.info(Succeeded in transfering file, the result is ${p2pResult.code}.);}console.info(Failed to transfer file, the error code is ${p2pResult.code}.);}if (p2pResult.progress) {console.info(Succeeded in transfering file, the progress is ${p2pResult.progress}.);} });fileIo.close(p2pfile.file);取消发送文件 参见[查询可用穿戴设备]章节获取已连接设备列表。参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。构造设备侧应用参数[P2pAppParam]。 根据文件路径filePath构造需要取消发送的文件[P2pFile])。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 调用[cancelFileTransfer]方法取消从手机上的应用到穿戴设备侧对应的应用的文件发送。 // 步骤3 构造设备侧应用参数 let appInfo: wearEngine.AppInfo {// 设置设备侧应用的应用信息包名与指纹bundleName: ,fingerprint: } let appParam: wearEngine.P2pAppParam {remoteApp: appInfo// transformLocalAppInfo默认为false不转换包名指纹 }// 步骤4 构造需要发送的文件 let p2pfile: wearEngine.P2pFile {// 设置需要发送的文件路径其中不能包含..file: fileIo.openSync() }// 步骤5 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 发送指定文件至设备 p2pClient.transferFile(targetDevice.randomId, appParam, p2pfile, () {// 回调函数执行逻辑 })// 步骤6 取消发送文件 p2pClient.cancelFileTransfer(targetDevice.randomId, appParam, p2pfile).then((p2pResult) {if (p2pResult.code wearEngine.P2pResultCode.COMMUNICATION_SUCCESS) {console.info(Succeeded in cancelling transfer file, the result is ${p2pResult.code}.);} }).catch((error: BusinessError) {console.error(Failed to cancel transfer file. Code is ${error.code}, message is ${error.message}.); })fileIo.close(p2pfile.file);订阅接收穿戴设备侧应用发过来的消息 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。 参见[查询可用穿戴设备]章节获取已连接设备列表。 参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 构造设备侧应用参数[P2pAppParam]。 构造接收到设备侧传来消息后的回调函数[callback]。 调用[registerMessageReceiver]方法订阅监听消息接收事件。 // 步骤3 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤4 构造设备侧应用参数 let appInfo: wearEngine.AppInfo {bundleName: ,fingerprint: } // 将设备侧应用参数类定义为appParam let appParam: wearEngine.P2pAppParam {remoteApp: appInfo// transformLocalAppInfo默认为false不转换包名指纹 }// 步骤5 构造回调函数 let callback (p2pMessage: wearEngine.P2pMessage) {console.info(Succeeded in receiving message, the message is ${p2pMessage.content}.); }// 步骤6 订阅监听消息接收事件 p2pClient.registerMessageReceiver(targetDevice.randomId, appParam, callback).then(() {console.info(Succeeded in registering message receiver.); }).catch((error: BusinessError) {console.error(Failed to register message receiver. Code is ${error.code}, message is ${error.message}.); })调用[unregisterMessageReceiver]方法手机应用取消接收穿戴设备侧应用发过来的消息需要传入订阅监听时的同一个回调函数对象。 p2pClient.unregisterMessageReceiver(targetDevice.randomId, appParam, callback).then(() {console.info(Succeeded in unregistering message receiver.); }).catch((error: BusinessError) {console.error(Failed to unregister message receiver. Code is ${error.code}, message is ${error.message}.); })订阅接收穿戴设备侧发送过来的文件 参见[查询可用穿戴设备]章节获取已连接设备列表。 参见[目标设备选择]章节从已连接设备列表中选定需要通信的设备。 调用[wearEngine]中的[getP2pClient]方法获取[P2pClient]对象。 构造设备侧应用参数[P2pAppParam]。 构造接收到设备侧传来文件后的回调函数[callback] 调用[registerFileReceiver] 方法订阅监听文件接收事件。 // 步骤3 获取P2pClient对象 let p2pClient: wearEngine.P2pClient wearEngine.getP2pClient(getContext(this));// 步骤4 构造设备侧应用参数 let appInfo: wearEngine.AppInfo {bundleName: ,fingerprint: } // 将设备侧应用参数类定义为appParam let appParam: wearEngine.P2pAppParam {remoteApp: appInfo// transformLocalAppInfo默认为false不转换包名指纹 }// 步骤5 构造回调函数 let callback (p2pMessage: wearEngine.P2pFile) {console.info(Succeeded in receiving file.); }// 步骤6 订阅监听文件接收事件 p2pClient.registerFileReceiver(targetDevice.randomId, appParam, callback).then(() {console.info(Succeeded in registering file receiver.); }).catch((error: BusinessError) {console.error(Failed to register file receiver. Code is ${error.code}, message is ${error.message}.); })调用[unregisterFileReceiver] 方法手机应用取消接收穿戴设备侧应用发过来的文件需要传入订阅监听时的同一个回调函数对象。 p2pClient.unregisterFileReceiver(targetDevice.randomId, appParam, callback).then(() {console.info(Succeeded in unregistering file receiver.); }).catch((error: BusinessError) {console.error(Failed to unregister file receiver. Code is ${error.code}, message is ${error.message}.); })最后呢 很多开发朋友不知道需要学习那些鸿蒙技术鸿蒙开发岗位需要掌握那些核心技术点为此鸿蒙的开发学习必须要系统性的进行。 而网上有关鸿蒙的开发资料非常的少假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料少走很多弯路节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等鸿蒙Harmony NEXT技术知识点 如果你是一名Android、Java、前端等等开发人员想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。 针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说我们直接看详细鸿蒙OpenHarmony 手册共计1236页与鸿蒙OpenHarmony 开发入门视频帮助大家在技术的道路上更进一步。 《鸿蒙 (OpenHarmony)开发学习视频》《鸿蒙生态应用开发V2.0白皮书》《鸿蒙 (OpenHarmony)开发基础到实战手册》OpenHarmony北向、南向开发环境搭建《鸿蒙开发基础》《鸿蒙开发进阶》《鸿蒙开发实战》 总结 鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程从而开设鸿蒙课程企业纷纷跟进启动了鸿蒙研发。 并且鸿蒙是完全具备无与伦比的机遇和潜力的预计到年底将有 5,000 款的应用完成原生鸿蒙开发未来将会支持 50 万款的应用。那么这么多的应用需要开发也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长学习鸿蒙势在必行 自↓↓↓拿

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神奇网站基于php网站建设论文

基于java的SSM框架Vue实现大学生兼职信息网站演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认…

网站备案 修改新建网页的方法有哪些

var str "今天是星期" "日一二三四五六".charAt(new Date().getDay());alert(str); 转载于:https://www.cnblogs.com/lccnblog/p/5902525.html

钢筋网片理论重量表规格表南阳做网站优化价格

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

浏览器怎样屏蔽网站石家庄长安区网站建设公司

知不足而奋进 望远山而前行 目录 文章目录 前言 下载 安装 解压 安装 添加开发包 修改仓库路径 下载软件开发包(慢,不推荐) 解压已有软件开发包(快,推荐) 总结 前言 在嵌入式系统开发中&#x…

网站ueo福建建设执业中心网站

计算机技术在当今的社会,已经变得越来越热,充斥着我们生活的方方面面。人们的工作或是休闲,离不开互联网和电脑,这既受益于各类软件的诞生,也与时下的技术息息相关。Java作为编程界赫赫有名的语言,在最近几…

网站建设代码做网站什么是三网合一

目录 摘要 1. 介绍 2. 数据模型 行 列族 时间戳 3. API 4. 所需构件 5. 实现 5.1 Tablet的位置 5.2 Tablet分配 5.3 Tablet服务 5.4 压实(Compactions) 6. 优化 本地化分组 压缩(compression) 通过缓存提高读操作的性能 Bloom过滤器 C…

网站添加提醒网站怎么做有创意

drools。drools我们很自豪地宣布,从版本6.0.0.Beta1开始,将Drools Planner重命名为OptaPlanner。 我们也很高兴推出其新网站: www.optaplanner.org。 OptaPlanner优化了业务资源的使用。 每个组织都面临计划方面的问题:以有限的有…

如何建立公司网站多少钱线上seo关键词优化软件工具

栈 栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出LIFO(Last In First Out)的原则。大家可以理解为…

广告设计模板网站东营网站建设优选案例

1.项目简介 动物分类教程分类释义界面展示 动物分类是生物学中的一个基础知识,它是对动物进行分类、命名和描述的科学方法。本教程将向您介绍动物分类的基本原则和方法,并提供一些常见的动物分类释义。 动物分类的基本原则 动物分类根据动物的形态、…

网站建设费用怎么做分录烟台网站制作效果

指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。 假设…

提升学历机构石家庄手机端seo

点击蓝字关注我们来源于网络,侵删1.C/C内存分布虚拟地址空间分布:由C/C编译的程序占用的内存分为以下几个部分:栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、…

在线切图网站企业+php网站建设

简介: Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实…

建立网站的主要方式沈阳网站建设优化企业

思路&#xff1a; 这道题假如要用暴力的方法&#xff0c;是过不去的。要使用差分的思想&#xff0c;创建一个差数组。因为本道题初始的座位数是0&#xff0c;直接建立一个全0数组即可。 参考代码&#xff1a; class Solution { public:vector<int> corpFlightBookings(…

工程网站怎么做公司企业模板

今天python的环境炸了&#xff0c;刚好也重新做一下&#xff0c;记录下折腾的过程。 文件下载 首先打开官网&#xff0c;找到对应的文件的下载索引。 https://www.python.org/downloads/windows/ 其中3.7.0是版本号&#xff0c;a是代表稳定版本&#xff0c;b代表的是测试版本&…

福步外贸网站网站的外链建设

定义和用法 CURDATE() 函数返回当前的日期。 语法 CURDATE() 实例 例子 1 下面是 SELECT 语句&#xff1a; SELECT NOW(),CURDATE(),CURTIME() 结果类似&#xff1a; NOW()CURDATE()CURTIME()2008-12-29 16:25:462008-12-2916:25:46例子 2 下面的 SQL 创建带有日期时间列 (Orde…

网站前后台代码桂林网站seo

在驱动程序开发中&#xff0c;对内存的操作要格外小心。如果某段内存是只读的&#xff0c;而驱动程序试图去写操作&#xff0c;会导致系统的崩溃。同样&#xff0c;当某段内存是不可读的情况下&#xff0c;驱动程序试图去读&#xff0c;同样会导致系统的崩溃。 DDK提供了两个函…

河北手机版建站系统开发wordpress开发单页面跳转

前言&#xff1a; 讲真&#xff0c;复习这块我是比较头大的&#xff0c;之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的&#xff0c;现在一想脑子里就剩下几个名词就觉得废柴一个了&#xff0c;朋友们有没有同感…

黄冈网站建设推荐长沙网站建设模板

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 硬盘中的静态文件 文件平时以一种固定的形式存放在硬盘中&#xff0c;我们叫它静态文件。 一块硬盘中可以分为两大区域&#xff1a;一个是硬盘内容管理表&#xff0c;另一个是真正存储内容的区域。 …

网站访问者广州互帮物流哪家公司做的网站

TypeScript:泛型 一、单个泛型二、多个泛型:泛型可以同时指定多三、接口加泛型 在定义函数或者类型时&#xff0c;如果类型不确定就可以使用 泛型。 一、单个泛型 //T 表示任意类型,具体只有在函数执行时才可以确定。 function fn<T>(a:T):T{return T; }// 可以直接调用…

知乐商城是什么网站wordpress 三款站群插件之比较

目录 1、为什么要用Spring框架&#xff1f;2、有了spring为什么又出现了 springboot&#xff1f;3、springboot出现后为什么又出现了spring cloud&#xff1f;4、SpringBoot自动配置&#xff08;重点&#xff09;5、SpringBoot启动流程&#xff08;重点&#xff09;6、简单谈一…