首页 iOS17气压传感器失效的解决方法
文章
取消

iOS17气压传感器失效的解决方法

iOS17气压传感器失效的解决方法

原因

自iOS17.4开始,苹果永久性的更改了使用气压传感器的隐私权限,要求开启 运动与健身 权限。

解决方式

调用 CMMotionActivityManager 的查询方法:通过调用queryActivityStartingFromDate:toDate:toQueue:withHandler:方法来查询活动数据。尽管我们不需要运动数据,但这个调用会触发所需的授权提示。

info.plist 中声明 Privacy - Motion Usage Description

1
2
<key>NSMotionUsageDescription</key>
<string>应用需要使用运动数据来提供气压传感器功能。</string>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#import <CoreMotion/CoreMotion.h>

@interface AltitudeManager : NSObject
@property (strong, nonatomic) CMMotionActivityManager *activityManager;
@property (strong, nonatomic) CMAltimeter *altimeter;
@end

@implementation AltitudeManager

- (instancetype)init {
    self = [super init];
    if (self) {
        self.activityManager = [[CMMotionActivityManager alloc] init];
        self.altimeter = [[CMAltimeter alloc] init];
    }
    return self;
}

- (void)startAltitudeUpdatesViaMotionManager {
    // 查询活动,确保授权提示会显示
    [self.activityManager queryActivityStartingFromDate:[NSDate date]
                                                toDate:[NSDate date]
                                               toQueue:[NSOperationQueue mainQueue]
                                           withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {
        if (error) {
            NSLog(@"活动查询错误: %@", error);
        } else {
            // 启动气压数据更新
            [self.altimeter startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue]
                                                   withHandler:^(CMAltitudeData * _Nullable altitudeData, NSError * _Nullable error) {
                if (error) {
                    NSLog(@"气压更新错误: %@", error);
                } else {
                    // 处理气压数据
                    NSLog(@"气压: %@, 海拔高度: %@", altitudeData.pressure, altitudeData.relativeAltitude);
                }
            }];
        }
    }];
}

@end

参考:

https://forums.developer.apple.com/forums/thread/747797

https://forums.developer.apple.com/forums/thread/756249

本文由作者按照 CC BY 4.0 进行授权

iOS开发中的堆和栈

-