首页 > 其他分享 >iOS UWB——NI框架部分类介绍

iOS UWB——NI框架部分类介绍

时间:2023-09-28 13:33:11浏览次数:24  
标签:NI 框架 iOS NISession 会话 func var UWB 设备

前文介绍iOS中NI框架的实现流程以及简单的应用示例,本文中针对NI框架中的部分类以及相关会话生命周期管理函数进行了简单的介绍。


NI框架关键类

Class NISession

class NISession : NSObject

概述

NISession类是整个Nearby Interaction类的核心,所有会话的生成都需要先实例化一个NISession类的对象,该类的实例化对象与用户通过NISessionDelegate协议与用户进行交互。每个NISession对象仅能和一个配对设备发起UWB会话,如果要和多个设备发起会话则需要分别为每一个配对设备实例化一个NISession对象来发起会话。

主要类成员

· var discoveryToken
class NIDiscoveryToken : NSObject
@NSCopying var discoveryToken: NIDiscoveryToken? { get }

discoveryToken为一个设备的唯身份标识符,Nearby Interaction根据此Token来确定与框架会话的设备的身份,该Token的数值在NISession对象被建立的时候由框架生成,框架在一个UWB会话开始之前通过与配对设备共同加入的网络将此Token发送给配对设备。

· var configuration
@NSCopying var configuration: NIConfiguration? { get }

由框架生成的关于一个特定设备的配置参数类,由框架提供的方法生成。

· func run(_)
func run(_ configuration: NIConfiguration)

run函数将启动UWB会话,其输入参数为一个NIConfiguration类,NIConfiguration类根据配件OOB交互信息唯一生成,并根据此NIConfiguration参数确定开启与特定设备的会话。

· var delegate
weak var delegate: NISessionDelegate? { get set }

Nearby Interaction框架与用户交互的协议,实现session等回调函数处理UWB会话数据。

· func pause()
func pause()

暂停发送具体和角度信息给配对设备,暂停后可重新调用run(:)函数恢复会话,但若暂停时间过久,框架则可能会调用 session(:didRemove:reason:)回调函数提示会话中断,并在NINearbyObject.RemovalReason中提示超时错误。

· func invalidate()
func invalidate()

终止UWB会话,Nearby Interaction会直接调用session(_:didRemove:reason:)方法终止会话。

Session生命周期相关回调

会话挂起,当app进入后台,将调用该回调。

optional func sessionWasSuspended(_ session: NISession)

当挂起结束之后,将触发Ended回调,此后可以继续使用Session。

optional func sessionSuspensionEnded(_ session: NISession)

Class NINearbyObject

class NINearbyObject : NSObject

概述

NINearbyObject是一个测距会话中,每一个具体设备的定位信息,是所有位置信息的封装类。

主要类成员

· var discoveryToken
@NSCopying var discoveryToken: NIDiscoveryToken { get }

与NISession类中的discoveryToken成员作用相同,为特定设备的唯一标识

· var distance
var distance: Float? { get }

存放一个测距会话中的距离信息,单位为米,如果没有获取到距离信息则值为nil

· var direction
var direction: simd_float3? { get }

存放一个测距会话中的方位信息,是一个三维的坐标值表示的矢量,如果没有获取到方位信息则值为nil

· enum RemovalReason
enum RemovalReason : Int, @unchecked Sendable

一个表明会话断开原因的枚举值,其值为表明配对设备终止会话的peerEnded,默认值为1;以及表明会话超时的timeout,默认值为0。

标签:NI,框架,iOS,NISession,会话,func,var,UWB,设备
From: https://blog.51cto.com/u_16248072/7638368

相关文章

  • selenium解决页面一直刷新,无法获取元素的问题
    这里的场景是页面一直在刷新,脚本处于等待中没有继续往下执行。百度之后,chrome之类的浏览器可以按esc停止刷新。适时手动按esc键盘,脚本往下继续执行。综上,启动了两个线程,一个线程执行_send_esc方法;另一个线程执行原始的tcpdump_go_stop方法。注意,页面要保持在前端展示deft......
  • Uniapp学习笔记(vue3)
    https://uniapp.dcloud.net.cn/使用Vue.js开发所有前端应用的框架开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。周边生态丰富发送请求 methods:{ getMsg(msg){ ......
  • 《Unix/linux系统编程》教材第7、8章学习笔记
    第七章:文件操作文件操作级别(1)硬件级别fdisk:将硬盘、U盘或SDC盘分区mkfs:格式化磁盘分区,为系统做好准备fsck:检查和维修系统碎片整理:压缩文件系统中的文件(2)操作系统内核中的文件系统函数前缀为k表示内核函数(3)系统调用:用户模式程序使用系统调用来访问内核函数open()、read......
  • cka-moni
    1.任务权重:1%kubectl您可以通过上下文从主终端访问多个集群。将所有这些上下文名称写入/opt/course/1/contexts.接下来写一个显示当前上下文的命令进去/opt/course/1/context_default_kubectl.sh,该命令应该使用kubectl。最后将做同样事情的第二个命令写入/opt/course/1/context_def......
  • git 报错Access denied
    remote:[session-614483a1]Accessdeniedfatal:unabletoaccess'https://gitee.com/**/':TherequestedURLreturnederror:403  解决办法: gitconfiguser.name"newname"gitconfigcredential.username"newname"或者删除本地钥匙串......
  • 戴尔OptiPlex 3020升级BIOS刷入NVME驱动
    前提:戴尔OptiPlex3020的主板是H81的,DELL官网的bios是不支持nvme启动的。我也是在外网找的,然后根据自己的情况刷的。目前电脑刷了后是可以直接选择nvme的ssd启动的。外网链接如下:https://www.tachytelic.net/2021/12/dell-optiplex-7020-nvme-ssd/简单的说下步骤:1、先从DELL官......
  • JAVA代码使用JNI的方式调用C/C++动态库
    JNI(javanativeinterface),通过JNI的方式调用动态库步骤比较麻烦,不用额外引入依赖,对java项目工程依赖侵入为0,类中含有native描述的方法都会与动态库去一一映射,能通过System.load()函数去加载动态库,这种方式主要使用的场景是java写好类(一般不是接口),让C或者C++去实现......
  • uniapp自动引入Vue3(ref,reactive...)的API、uniapp生命周期和封装hooks
    未自动导入Vue3(ref,reactive...)的API和uniapp生命周期,需要在每个页面把API和uniapp生命周期的代码都重复写一遍<scriptsetup>import{ref,reactive}from"vue"import{onLaunch,onShow,onHide}from'@dcloudio/uni-app'//封装的hooksimport{useLi......
  • Arch-Pipelining
    流水线笔记这个问题可能需要吸三袋烟的时间才能想明白——《福尔摩斯探案集》1.引言1.1什么是流水线它是一种将多条指令重叠执行的实现技术。一般来说,我们按照严格的先后顺序来执行各个指令,那么执行的时间就大约是执行每一条指令的时间之和。而流水线的思想和工业中汽车装配......
  • [Unit testing] Vitest, mock Time
    import{afterEach,test,expect,vi,beforeEach}from'vitest';import{render}from'test/utilities';importTimeZonefrom'.';beforeEach(()=>{//freezetimevi.useFakeTimers();//setsystemtimetoacert......