鸿蒙NEXT开发中使用星闪服务

news/2025/1/5 15:31:30/文章来源:https://www.cnblogs.com/wgjava/p/18649789

大家好,我是 V 哥,学习鸿蒙开发的星闪服务,整理了这个学习笔记分享给大家。NearLink Kit(星闪服务)是鸿蒙操作系统提供的一种低功耗、高速率的短距离通信服务,它允许设备之间进行连接和数据交互。以下是一些具体的使用案例和步骤,以帮助理解如何在实际业务中使用星闪服务。

以下这些场景使用星闪

  1. 智能座舱

    • 车内降噪:使用星闪服务在车辆内部进行音频信号的传输,以实现主动降噪功能。
    • 互动投屏:通过星闪服务将手机或其他移动设备上的屏幕内容无线传输到车载显示屏幕上。
    • 车载娱乐:利用星闪服务连接车载信息系统和乘客的个人设备,提供个性化娱乐体验。
    • 智能车钥匙:通过星闪服务实现车辆的无钥匙进入和启动功能,提升车辆的智能化水平。
  2. 智能家居

    • 设备控制:使用星闪服务连接家中的各种智能设备,如智能灯泡、智能插座等,实现远程控制和自动化操作。
  3. 智能终端

    • 鼠标和手写笔:中心设备(如电脑或平板)通过星闪服务与外围设备(鼠标、手写笔)配对连接,使用鼠标和手写笔作为输入控制中心设备。
  4. 智能制造

    • 生产线自动化:在生产线上使用星闪服务连接各种传感器和控制器,实现生产过程的实时监控和优化。

开发步骤

以下是使用NearLink Kit实现星闪广播的基本步骤:

  1. 准备软硬件环境

    • 确保开发环境为DevEco Studio 5.0.1 Beta3及以上版本,SDK为API 13 beta及以上。
    • 确认终端设备支持星闪功能,如Mate 60 Pro、Pura70系列等。
  2. 申请权限

    • 动态申请星闪权限ohos.permission.ACCESS_NEARLINK
  3. 广播接口说明

    • 使用startAdvertising接口启动星闪广播。
    • 使用stopAdvertising接口停止星闪广播。
    • 通过onoff接口订阅和取消订阅星闪广播状态变化事件。
  4. 广播实现

    • 创建一个类(如NearLinkAdvUtils),封装星闪广播的相关功能。
    • 订阅星闪广播状态变化事件,以便在状态变化时接收通知。
    • 设置广播参数和数据,包括广播UUID、广播内容等。
    • 开启星闪广播,并获取返回的advertisingId
    • 停止星闪广播时使用对应的advertisingId

来看一个案例代码

我们以实现车内降噪功能为例,使用星闪服务(NearLink Kit)进行音频信号的传输,涉及到音频信号的采集、处理和播放。通过一个简化的代码示例,来用一下星闪服务在车辆内部进行音频信号的传输,实际应用中需要根据具体的硬件和软件环境进行调整哈。

步骤1:导入必要的模块

import featureAbility from '@ohos.ability.featureAbility';
import want from '@ohos.want';
import { CommonEvent, CommonEventPublishInfo, CommonEventSubscribeInfo, CommonEventListener, CommonEventSubscribeInfoMatcher, CommonEventPublishInfoMatcher } from '@ohos.commonevent';
import { AudioRecord, AudioPlayer } from '@ohos.media.audio';

步骤2:定义星闪服务的广播和接收

// 星闪广播
function startNearLinkBroadcast() {const publishInfo = new CommonEventPublishInfo();publishInfo.event = 'com.vin.harmony.nearlink.audio';publishInfo.data = 'start_audio_capture';CommonEvent.publish(publishInfo, (err, data) => {if (err) {console.error('Failed to publish nearlink event:', err);} else {console.log('Nearlink event published successfully');}});
}// 星闪接收
function onNearLinkEvent(event) {if (event.matchType === CommonEventSubscribeInfoMatcher.ABILITY && event.eventId === 'com.example.harmony.nearlink.audio') {const audioData = event.data;if (audioData === 'start_audio_capture') {startAudioCapture();}}
}// 订阅星闪事件
function subscribeNearLinkEvent() {const subscribeInfo = new CommonEventSubscribeInfo();subscribeInfo.events = ['com.vin.harmony.nearlink.audio'];subscribeInfo.matchType = CommonEventSubscribeInfoMatcher.ABILITY;CommonEvent.subscribe(subscribeInfo, (err, data) => {if (err) {console.error('Failed to subscribe nearlink event:', err);} else {console.log('Subscribed to nearlink event successfully');}});
}

步骤3:音频信号的采集和播放

// 开始音频采集
function startAudioCapture() {const audioRecord = new AudioRecord({sampleRate: 44100,channels: 2,encoding: AudioRecord.AudioEncoding.PCM_16_BIT,callback: (buffer) => {// 处理音频数据,例如进行降噪处理processAudioData(buffer);}});audioRecord.start();
}// 处理音频数据
function processAudioData(buffer) {// 这里可以添加降噪算法,例如使用FFT进行频域分析和滤波// 假设降噪后的数据存储在bufferProcessed中const bufferProcessed =降噪算法(buffer);// 播放处理后的音频playProcessedAudio(bufferProcessed);
}// 播放处理后的音频
function playProcessedAudio(buffer) {const audioPlayer = new AudioPlayer();audioPlayer.play(buffer, (err) => {if (err) {console.error('Failed to play audio:', err);}});
}

步骤4:初始化和启动

// 在Ability的onStart中初始化和启动
export default featureAbility({data: {},onStart: function () {subscribeNearLinkEvent();},onStop: function () {// 取消订阅星闪事件CommonEvent.unsubscribe(subscribeInfo);},// 其他Ability生命周期方法...
});

请注意,案例中的降噪算法是一个占位符,你需要根据实际的降噪算法来实现它。此外,音频采集和播放的具体参数(如采样率、通道数、编码方式)也需要根据实际的硬件和需求进行调整。

在实际应用中,你需要与车辆的硬件供应商合作,以确保音频信号的采集和播放能够与车辆的音频系统无缝集成。关注威哥爱编程,一起学鸿蒙。

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

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

相关文章

大语言模型提示技巧(三)-迭代式提示

大语言模型还没有达到能够准确猜测人类意图的程度,此时它不能立即反馈出令人满意的答复,我们需要做的是对大语言模型进行迭代式提示,反复推进,直至大语言模型给出了令人满意的答案。我们与大语言模型交互时,往往给出的提示过于简略,而大语言模型还没有达到能够准确猜测你…

spring 中 Bean 的生命周期

spring 中 Bean 的生命周期是怎样的?原文 连环18问 https://mp.weixin.qq.com/s/liWn2Dn91cmuiqHSxVO_fASpringBean 生命周期大致分为4个阶段:1.「实例化」,实例化该 Bean 对象2.「填充属性」,给该 Bean 赋值3.「初始化」如果实现了 Aware 接口,会通过其接口获取容器资源如…

一步一步构建RAG智能问答系统

一步一步基于LangChain构建智能问答系统(Construct intelligent question answering system based on LangChain)虽然LLM(大语言模型)非常强大,但它们对于它们未经训练的信息一无所知。如果想使用LLM来回答它未经训练的文档相关问题,我们需要向其提供这些文档的信息。最常…

VSCode开发uni-app环境搭建

为什么选择VS Code?1, HbuilderX对TS类型支持暂不完善2, 前端程序员最熟悉的编辑器3, 支持各种AI插件(比如国内的阿里云通义灵码、百度comate、豆包MarsCode等,国外的也有很多)。安装uni-aap插件(快速创建页面、uni-app代码提示、鼠标悬停查看文档)1, uni-create-vie…

函子

函子在C#中,函数式编程的函子(Functor)是一种实现特定接口或模式的结构,它能够将函数应用于数据结构中的值。函子的核心概念源自数学中的范畴理论,但在编程中更倾向于实际操作。 函子的特点包装一个值:函子是一个容器,能够存储某种类型的值。 提供一个方法来应用函数:它…

【前端开发】前端接口防止重复请求实现方案

#薅羊毛 前言 前段时间老板心血来潮,要我们前端组对整个的项目都做一下接口防止重复请求的处理(似乎是有用户通过一些快速点击薅到了一些优惠券啥的)。。。听到这个需求,第一反应就是,防止薅羊毛最保险的方案不还是在服务端加限制吗?前端加限制能够拦截的毕竟有限。可老板…

小辰讲故事哄娃神器

点击上方蓝字睿共享关注我 前言 我给大家安利一款哄娃软件,无论是车机还是安卓手机都能轻松驾驭。这款软件简直就是孩子们的欢乐宝库,首页上五大板块一目了然:精彩故事、知识小站、儿歌乐园、英语启蒙,还有家长加油站。家里有小朋友的家长们,这款软件绝对值得一试,保证大…

MySQL优化--插入数据优化和主键优化

一、插入数优化(insert) 平时我们插入数据的时候一般都是一个语句插一个数据,如下所示:insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行…

推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate

今天给大家推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate 。项目介绍: 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker 。 项目亮点:基于 AI 布局分析和 PDF 指令流分析实现对文档排版的完整保…

delphi 协程 doroutine 协程作用域

简介 一个协程可以支持多个作用域,比如:.scopes([form1, form2, form3]),作用域关闭,则这个作用域下面的所有协程都会被取消并关闭; 若一个作用域下,挂载一个协程A,这个协程A 又会衍生成百上千的子协程,此时只需要给这个协程A设置一下作用域就可以了,没有必要 A衍生的…

安装windows和debian双系统

安装windows和debian双系统软件工具下载 必要下载Debian系统iso镜像: https://mirrors.tuna.tsinghua.edu.cn/debian-cd/current-live/amd64/iso-hybrid/我下载的是debian-live-12.8.0-amd64-cinnamon.iso镜像,自己可根据喜好下载其它版本Ventoy启动盘制作工具: https://www.v…

促销系统:促销活动、优惠券、优惠规则概念模型设计

大家好,我是汤师爷~ 概念模型设计是促销系统开发的关键环节,我们需要基于之前的功能分析,将复杂的促销业务拆解成清晰的领域概念,这些概念之间的关系界定和边界划分,将直接决定系统的可维护性和扩展性。 促销系统核心概念模型通过对促销业务的分析,我们可以抽象出促销系统…