【IOS开发】传感器 SensorKit

news/2024/7/20 23:04:31 标签: ios, cocoa, macos

资源

官方文档 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 Hz
      self.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.x
            let y = data.acceleration.y
            let 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 轴加速度值的结构类型。

http://www.niftyadmin.cn/n/5273236.html

相关文章

Leetcode 376 摆动序列

题意理解&#xff1a; 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 如果是摆动序列&#xff0c;前后差值呈正负交替出现 为保证摆动序列尽可能的长&#xff0c;我们可以尽可能的保留峰值&#xff0c;&#xff0c;删除上下坡的中间值&…

Maven下载及安装自用版

Maven下载及安装自用版 可能是Maven用久了。感觉Maven用起来还算顺手&#xff0c;比Gradle要好上手一些。 一、下载 Maven 下载地址 注意下载版本和依赖要求&#xff0c;下载后&#xff0c;解压放在指定的位置;注意安装地址&#xff0c;放在自己规划好的开发环境专用文件夹里…

【机器学习】线性模型-logistic 回归

一、逻辑&#xff08;logistic&#xff09;回归原理 1.1 逻辑回归的数学原理 1.2 logistic回归的L2正则化原问题 1.3 逻辑回归的L2正则化原问题使用可信域牛顿法求解 1.4 logistic 回归L2正则化的对偶问题 1.4.1 logistic回归的拉格朗日对偶问题和利用KKT条件求解 1.4.2 逻辑回…

华为数通试题

选择题 华为数通推出的面向企业的云计算平台是&#xff1f; A) FusionSphere B) CloudEngine C) Agile Controller D) eSight 下面哪个不是华为数通的核心交换机系列&#xff1f; A) S12700 B) S5700 C) S9300 D) CloudEngine 华为数通的企业级路由器系列包括哪个&#xff1f…

html之CSS的高级选择器应用

文章目录 一、CSS高级选择器有哪些呢&#xff1f;二、高级选择器的应用1、层次选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器 2、结构伪类选择器&#xff08;不常用&#xff09;3、属性选择器E[attr]E[attrval]E[attr^val]E[attr$val]E[attr*val] 一、CSS高级选择器有…

WIRESHARK的介绍和基本运用(分析)

#江南的江 #每日鸡汤&#xff1a;每一个成功者都有一个开始。勇于开始&#xff0c;才能找到成功的路。 #初心和目标&#xff1a;学会用网络安全知识&#xff0c;利民&#xff0c;利己。 Wireshark Wireshark的简介&#xff1a; wireshark是一款抓包软件&#xff0c;他是与本…

信息收集 - 网站服务器

操作系统 区分大小写: 如果修改首页或其他页面的大小写后,网站返回一个错误页面,例如报错 "404 Not Found" 或类似的错误,这可能意味着网站运行在 Linux 或类 Unix 操作系统上。这是因为大多数 Linux 系统是区分大小写的。如果修改大小写后,网站页面正常显示,这…

随时随地刷题题库小程序源码系统+完整代码包+安装部署教程

互联网的普及和在线教育的发展&#xff0c;越来越多的人开始利用碎片时间进行学习。为了满足这一需求&#xff0c;随时随地刷题题库小程序应运而生。该小程序提供了一个便捷的刷题平台&#xff0c;用户可以在任何时间、任何地点进行刷题练习&#xff0c;提高自己的学习效率。 …