【IOS开发】传感器 SensorKit
资源
官方文档 https://developer.apple.com/search/?q=motion%20graph&type=Documentation
SensorKit 使应用程序能够访问选定的原始数据或系统从传感器处理的指标。
- 步骤信息
- 加速度计或旋转速率数据
- 用户手腕上手表的配置
- 物理环境中的环境光
- 有关用户日常通勤或旅行的详细信息
环境信息
环境光
ambientLightSensor
The sample type for this sensor is SRAmbientLightSample.
您需要通过将 字典添加到信息属性列表中的 键来提供记录环境光的原因。SRSensorUsageAmbientLightSensorNSSensorKitUsageDetail
SRSensorUsageAmbientLightSensor
一组属性,解释您的应用程序需要观察用户环境中的光照水平。
property list key Description
解释性字符串,详细说明您的研究使用传感器数据的方式。
必需的
property list key Required
一个布尔值,指示您的应用程序的研究是否依赖于该传感器。
SRAmbientLightSample:
https://developer.apple.com/documentation/sensorkit/srambientlightsample
测量光强度
var chromaticity: SRAmbientLightSample.Chromaticity
描述样本的光亮度和色调的坐标对。
struct SRAmbientLightSample.Chromaticity
描述光亮度和色调的坐标对。
var lux: Measurement<UnitIlluminance>
描述样本光通量的对象。
var placement: SRAmbientLightSample.SensorPlacement
光相对于传感器的位置。
enum SRAmbientLightSample.SensorPlacement
描述光源相对于传感器的位置的方向值。
加速度计
iOS 设备都有一个三轴加速度计。加速度计报告的值以重力加速度的增量进行测量,值 表示给定方向上每秒 9.8 米(每秒)的加速度。加速度值可以是正值或负值,具体取决于加速度的方向。

使用 Core Motion 框架的类访问原始加速度计数据。具体来说, 类提供了用于启用加速计硬件的接口。启用硬件时,选择最适合您的应用程序的接口。您可以仅在需要时提取加速度计数据,也可以要求框架定期将更新推送到您的应用程序。每种技术都涉及不同的配置步骤并具有不同的用例。CMMotionManager
重要的提示:
如果您的应用依赖于加速度计硬件,请使用 文件的 键>
价值。有关此键含义的详细信息,请参阅信息属性列表键参考。UIRequiredDeviceCapabilitiesInfo.plistaccelerometer
具体信息: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/
检查加速度计数据的可用性
Check the value of the is AccelerometerAvailable property of CMMotionManager and make sure it’s true. If it’s false, starting updates doesn’t deliver any data to your app.
不连续获取加速度数据
对于按自己的时间表处理加速度计数据的应用(例如游戏),请使用 的 方法开始传送加速度计数据。当您调用此方法时,系统会启用加速计硬件并开始更新 对象的 属性。但是,系统在更新该属性时不会通知您。当您需要加速度计数据时,必须显式检查该属性的值。 startAccelerometerUpdates()CMMotionManageraccelerometerDataCMMotionManager
开始交付加速计更新之前,请通过向 属性分配值来指定更新频率。您可以请求更新的最大频率取决于硬件,但通常至少为 100 Hz。如果您请求的频率高于硬件支持的频率,Core Motion 会使用支持的最大值。accelerometerUpdateInterval
let motion = CMMotionManager()func startAccelerometers() {// Make sure the accelerometer hardware is available. if self.motion.isAccelerometerAvailable {self.motion.accelerometerUpdateInterval = 1.0 / 50.0 // 50 Hzself.motion.startAccelerometerUpdates()// Configure a timer to fetch the data.self.timer = Timer(fire: Date(), interval: (1.0/50.0), repeats: true, block: { (timer) in// Get the accelerometer data.if let data = self.motion.accelerometerData {let x = data.acceleration.xlet y = data.acceleration.ylet z = data.acceleration.z// Use the accelerometer data in your app.}})// Add the timer to the current run loop.RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode)}
}
显示了一种将加速度计更新配置为每秒发生 50 次的方法。然后,该方法配置一个计时器以相同的频率获取这些更新并对数据执行某些操作。您可以将计时器配置为以较低的频率触发,但这样做会导致硬件生成比实际使用的更新更多的更新,从而浪费电量。
处理稳定的加速度计数据流
当您想要捕获所有传入的加速度计数据(也许可以分析其运动模式)时,请使用 方法 。此方法通过在指定队列上执行处理程序块,将每组新的加速度计值推送到您的应用程序。这些块的排队可确保您的应用接收所有加速计数据,即使您的应用变得繁忙并且短时间内无法处理更新。startAccelerometerUpdates(to:withHandler:)CMMotionManager
开始交付加速计更新之前,请通过向 属性分配值来指定更新频率。您可以请求更新的最大频率取决于硬件,但通常至少为 100 Hz。如果您请求的频率高于硬件支持的频率,Core Motion 将使用支持的最大值。 accelerometerUpdateInterval
清单 2 显示了 MotionGraphs 示例代码项目中的方法,您可以检查该方法以了解更多信息语境。该应用程序显示加速度计数据的实时图表。用户使用滑块配置加速度计的更新频率,更改该频率会导致调用示例中所示的 方法。此方法以新频率重新启动加速度计更新。每次收到新样本时,指定的块都会在主线程上排队。该块使用新的加速度计值更新应用程序的图形视图和标签。 startUpdatesWithSliderValue:
static const NSTimeInterval accelerometerMin = 0.01;
- (void)startUpdatesWithSliderValue:(int)sliderValue {// Determine the update interval.NSTimeInterval delta = 0.005;NSTimeInterval updateInterval = accelerometerMin + delta * sliderValue;// Create a CMMotionManager object.CMMotionManager *mManager = [(APLAppDelegate *)[[UIApplication sharedApplication] delegate] sharedManager];APLAccelerometerGraphViewController * __weak weakSelf = self;// Check whether the accelerometer is available.if ([mManager isAccelerometerAvailable] == YES) {// Assign the update interval to the motion manager.[mManager setAccelerometerUpdateInterval:updateInterval];[mManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue]withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {[weakSelf.graphView addX:accelerometerData.acceleration.x y:accelerometerData.acceleration.y z:accelerometerData.acceleration.z];[weakSelf setLabelValueX:accelerometerData.acceleration.x y:accelerometerData.acceleration.y z:accelerometerData.acceleration.z];}];}self.updateIntervalLabel.text = [NSString stringWithFormat:@"%f", updateInterval];
}
- (void)stopUpdates {CMMotionManager *mManager = [(APLAppDelegate *)[[UIApplication sharedApplication] delegate] sharedManager];if ([mManager isAccelerometerActive] == YES) {[mManager stopAccelerometerUpdates];}
}
CMRecordedAccelerometerData
class CMRecordedAccelerometerData : CMAccelerometerData
设备记录的单条加速度计数据。使用CMSensorRecorder 对象从系统中检索已记录的数据。
var startDate: Date
记录传感器样本时的挂钟时间。
var identifier: UInt64
加速度计数据的唯一标识符。
class CMSensorDataList : NSObject
系统记录的加速度计数据列表
https://developer.apple.com/documentation/coremotion/cmsensordatalist
使用传感器数据列表对象来枚举加速度计数据
-(void)processSamplesFromDate:(NSDate*)start toDate:(NSDate)end {CMSensorRecorder* recorder = [[CMSensorRecorder alloc] init];CMSensorDataList* list = [recorder accelerometerDataFrom:start to:end];for (CMRecordedAccelerometerData* data in list) {// Process the data.NSLog(@"Sample: (%f, %f, %f)", data.acceleration.x,data.acceleration.y, data.acceleration.z);}
}
class CMSensorRecorder : NSObject
提供加速度运动数据的传感器。使用传感器记录器启动加速度计数据的收集。稍后,使用传感器记录器获取记录的数据,以便您可以对其进行分析。您可以使用记录的数据来评估特定类型的运动并将结果合并到您的应用程序中。
要使用传感器记录器,请创建此类的实例并调用 方法来开始记录数据。您不需要明确停止录制过程。当指定时间到期且没有其他应用延长录音时间时,系统自动停止录音。 清单 1 显示了如何记录 20 分钟的加速度计数据。 recordAccelerometer(forDuration:)
static let accelerometer: SRSensor: https://developer.apple.com/documentation/sensorkit/srsensor/3377672-accelerometer
if CMSensorRecorder.isAccelerometerRecordingAvailable() {let recorder = CMSensorRecorder()recorder.recordAccelerometerForDuration(20 * 60) // Record for 20 minutes
}
static let odometer: SRSensor
提供有关速度和坡度信息的传感器。h
ttps://developer.apple.com/documentation/sensorkit/srsensor/4173050-odometer
class CMAccelerometerData : CMLogItem
来自设备的三个加速计的数据样本。
访问加速度计数据
var acceleration: CMAcceleration
由加速度计测量的加速度。
struct CMAcceleration
包含 3 轴加速度值的结构类型。
相关文章:
【IOS开发】传感器 SensorKit
资源 官方文档 https://developer.apple.com/search/?qmotion%20graph&typeDocumentation SensorKit 使应用程序能够访问选定的原始数据或系统从传感器处理的指标。 步骤信息加速度计或旋转速率数据用户手腕上手表的配置物理环境中的环境光有关用户日常通勤或旅行的详细…...
【C++】封装:练习案例-点和圆的关系
练习案例:点和圆的关系 设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。 思路: 1)创建点类point.h和point.cpp 2)创建圆类circle.h和circle…...
【vue】正则表达式限制input的输入:
文章目录 1、只能输入大小写字母、数字、下划线:/[^\w_]/g2、只能输入小写字母、数字、下划线:/[^a-z0-9_]/g3、只能输入数字和点:/[^\d.]/g4、只能输入小写字母、数字、下划线:/[^\u4e00-\u9fa5]/g5、只能输入数字:/\…...
异步导入中使用SecurityUtils.getSubject().getPrincipal()获取LoginUser对象导致的缓存删除失败问题
结论 SecurityUtils.getSubject().getPrincipal()实际用的也是ThreadLocal,而ThreadLocal和线程绑定,异步会导致存数据丢失,注意! 业务背景 最近,系统偶尔会出现excel导入成功,但系统却提示存在进行中的…...
大数据机器学习深度解读决策树算法:技术全解与案例实战
大数据机器学习深度解读决策树算法:技术全解与案例实战 本文深入探讨了机器学习中的决策树算法,从基础概念到高级研究进展,再到实战案例应用,全面解析了决策树的理论及其在现实世界问题中的实际效能。通过技术细节和案例实践&…...
【开源Mongdb驱动】SpringBoot+Mybatis+Mongdb融合使用教程
#【开源Mongdb驱动】SpringBootMybatisMongdb无缝融合使用教程 介绍 本文介绍一款基于JAVA开源的mongodb jdbc驱动为基础的无缝与springbootmybatis融合使用案例 mongodb JDBC 使用案例 https://blog.csdn.net/gongbing798930123/article/details/135002530 《基于开源的JA…...
freeRTOS使用
创建第一个FreeRTOS程序 1、官网源码下载 (1)进入FreeRTOS官网FreeRTOS professional services for application and RTOS development and consulting. FreeRTOS is an Open Source Code RTOS (2)点击下载FreeRTOS 2、处理目录 &…...
基于vue的线上点餐系统论文
基于vue的线上点餐系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了线上点餐系统的开发全过程。通过分析线上点餐系统管理的不足,创建了一个计算机管理线上点餐系统的方案。文章介绍了线上点餐…...
【Windows】windows11右键默认显示更多选项的办法
Windows11系统的右键菜单显示,需要多点一次“显示更多选项”才能看到所有菜单内容,按下面步骤简单设置一下就能恢复成Windows经典的右键菜单显示。 1. 2.输入命令【reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a…...
推荐使用过很好用的api,含免费次数
IP归属地-IPv4城市级:根据IP地址查询归属地信息,支持到城市级,包含国家、省、市、和运营商等信息。IP归属地-IPv6城市级:根据IP地址(IPv6版本)查询归属地信息,支持到中国大陆地区(不…...
QT最大线程并发
声明一个处理函数;int timeTask(); 头文件: #include <QtConcurrent> #include <QFuture> 并发处理改函数的任务,直到处理完成: QFuture<int> ft QtConcurrent::run(this, &ch72_concurrent::timeTask);while (!f…...
在金属/绝缘体/p-GaN栅极高电子迁移率晶体管中同时实现大的栅压摆幅和增强的阈值电压稳定性
标题:Simultaneously Achieving Large Gate Swing and Enhanced Threshold Voltage Stability in Metal/Insulator/p-GaN Gate HEMT (IEDM2023) 摘要 摘要:对于增强型GaN功率晶体管的发展,栅压摆幅和阈值电压稳定性通常是互相排斥的。本文展…...
Redis第1讲——入门简介
Java并发编程的总结和学习算是告一段落了,这段时间思来想去,还是决定把Redis再巩固和学习一下。毕竟Redis不论是在面试还是实际应用中都是极其重要的,在面试中诸如Redis的缓存问题、热key、大key、过期策略、持久化机制等;还有在实…...
数据科学知识库
我的博客是一个技术分享平台,涵盖了机器学习、数据可视化、大数据分析、数学统计学、推荐算法、Linux命令及环境搭建,以及Kafka、Flask、FastAPI、Docker等组件的使用教程。 在这个信息时代,数据已经成为了一种新的资源,而机…...
设计模式——责任链模式(行为模式)
引言 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 问题 假如你正在开发一个在线订购系统。 你希望对系统访问进行限制, 只允…...
【谭浩强C语言:前八章编程题(多解)】
文章目录 第一章1. 求两个整数之和(p7) 第二章2. 求三个数中的较大值(用函数)(p14、p107)3.求123...n(求n的阶乘,用for循环与while循环)(P17)1.循环求n的阶乘2.递归求n的阶乘(n< 10) 4.有M个学生,输出成绩在80分以上的学生的学…...
程序人生15年人生感悟
计算机程序员并不是一件什么高大上的职业。而仅仅是一份普通的工作。就像医生能治病救人,我们能治蓝屏救程序,我们都在为这个世界默默的做出自己的贡献。刻意或无意宣扬某个职业高大上,其实质是对其它行业从业者的不公平。但是有些人却常常这…...
React与AJAX
大家好,欢迎来到 《React与AJAX》 课程。在这一课中,我们将学习如何在 React 中使用 AJAX。 什么是 AJAX? AJAX(Asynchronous JavaScript and XML)是一种使用 JavaScript 在浏览器和服务器之间进行异步通信的技术。A…...
C++ STL泛型算法
泛型算法 <algorithm>定义了大约 80 个标准算法。 它们操作由一对迭代器定义的(输入)序列或单一迭代器定义的(输出)序列。 当对两个序列进行拷贝、比较操作时,第一个序列由一对迭代器[b,e)表示,但第…...
使用OpenSSL生成PKCS#12格式的证书和私钥
要使用OpenSSL生成PKCS12格式的证书和私钥,可以按照以下步骤进行操作: 1. 安装OpenSSL 首先,确保已在计算机上安装了OpenSSL。可以从OpenSSL官方网站(https://www.openssl.org/)下载并安装适用于您的操作系统的版本。…...
从零配置YOLOv5与RealSense D405:深度测距与目标检测的完整流程指南
从零构建YOLOv5与RealSense D405的智能视觉系统:深度感知与目标检测实战手册 当计算机视觉遇上深度感知,会碰撞出怎样的火花?YOLOv5作为当前最流行的实时目标检测框架,与Intel RealSense D405深度相机结合,能够为机器…...
Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作+命令行示例详解
Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作命令行示例详解 1. 快速了解Wan2.2-I2V-A14B Wan2.2-I2V-A14B是一款强大的文生视频模型,能够根据文本描述生成高质量视频内容。这个私有部署镜像专为RTX 4090D 24GB显存显卡优化,内置完整运…...
GLM-OCR场景应用:教育资料数字化、商务文档信息抽取实战
GLM-OCR场景应用:教育资料数字化、商务文档信息抽取实战 1. 引言:文档智能化的时代需求 在信息爆炸的今天,我们每天都要处理大量纸质文档和电子文件。教育机构需要将历年试卷数字化归档,企业财务部门要处理堆积如山的发票和合同…...
Llama-3.2V-11B-cot应用场景:跨境电商多语言商品图信息提取案例
Llama-3.2V-11B-cot应用场景:跨境电商多语言商品图信息提取案例 1. 项目背景与价值 跨境电商平台每天需要处理海量商品图片,传统人工标注方式面临三大痛点: 语言障碍:商品图可能包含多种语言的文字信息效率瓶颈:人工…...
从朱诺到威尼斯:一个可持续旅游模型如何‘开箱即用’解决你的美赛问题二
从朱诺到威尼斯:可持续旅游模型的跨场景迁移实战指南 模型迁移的核心挑战与解决框架 当我们将一个城市的可持续旅游模型迁移到另一个城市时,表面上看似乎只需要更换数据输入,但实际操作中会遇到三个维度的挑战: 1. 资源禀赋差异 自…...
Beekeeper Studio:现代跨平台数据库管理工具的技术架构与实战应用
Beekeeper Studio:现代跨平台数据库管理工具的技术架构与实战应用 【免费下载链接】beekeeper-studio beekeeper-studio/beekeeper-studio: Beekeeper Studio 是一款开源的跨平台数据库客户端工具,支持多种数据库(如MySQL, PostgreSQL, SQLit…...
解锁论文写作新姿势:书匠策AI,你的毕业论文“智囊团”!
在学术的浩瀚海洋中,毕业论文无疑是一座巍峨的灯塔,它不仅是对我们多年学习成果的总结,更是通往未来职业道路的一块重要敲门砖。然而,面对堆积如山的资料、错综复杂的逻辑框架,以及那令人头疼的格式要求,不…...
Untrunc:10倍速视频修复工具,让损坏的MP4/MOV文件起死回生
Untrunc:10倍速视频修复工具,让损坏的MP4/MOV文件起死回生 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾经因为视频文件损坏而失去…...
Souliss嵌入式状态同步框架:轻量级去中心化智能家居通信实践
1. Souliss 智能家居网络框架深度解析:面向嵌入式工程师的底层通信架构实践指南Souliss 是一个专为资源受限嵌入式节点设计的轻量级、去中心化智能家居网络框架。其核心目标并非构建通用物联网平台,而是解决真实家庭场景中多协议共存、低功耗节点协同、边…...
墨语灵犀在互联网产品设计中的应用:用户需求分析与PRD生成
墨语灵犀在互联网产品设计中的应用:用户需求分析与PRD生成 每次产品评审会前,你是不是也经历过这样的夜晚?面对一堆零散的用户反馈、模糊的市场数据和脑子里盘旋的初步想法,要在短短几天内把它们梳理成一份逻辑清晰、结构完整的产…...
