有没有办法监控用户的iphone移动,如"提高说话"功能?

fan*_*axy 4 sensor proximity ios siri

我希望在用户将iphone抬到脸上时收到通知.就像siri一样.可能吗?

添加更具体的要求:当用户将手机放在耳边时,我想让屏幕变暗.我知道可以启用接近传感器来实现这一点.但令人讨厌的是,当用户将手指移到传感器上时,屏幕会不时变暗.所以我想知道如何避免这种情况,只有当用户抬起iphone说话时才会使屏幕变暗?

Rob*_*Rob 7

请参阅UIDevice类参考中的使用接近传感器.那么你:


为了检测用户是否将其握在脸上,我可能会将接近传感器与其结合CMMotionManager并查看gravity属性以查看他们是否几乎垂直握住手机.因此,定义一些类属性:

@property (nonatomic, strong) CMMotionManager *motionManager;
@property (nonatomic, strong) NSOperationQueue *deviceQueue;
Run Code Online (Sandbox Code Playgroud)

然后你可以启动CMMotionManager,查看设备是否处于垂直位置:

self.deviceQueue = [[NSOperationQueue alloc] init];
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.deviceMotionUpdateInterval = 5.0 / 60.0;

UIDevice *device = [UIDevice currentDevice];

[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical
                                                        toQueue:self.deviceQueue
                                                    withHandler:^(CMDeviceMotion *motion, NSError *error)
{
    BOOL vertical = (motion.gravity.z > -0.4 && motion.gravity.z < 0.4 & motion.gravity.y < -0.7);
    if ((vertical && !device.proximityMonitoringEnabled) || (!vertical && device.proximityMonitoringEnabled))
    {
        device.proximityMonitoringEnabled = vertical;
    }
}];
Run Code Online (Sandbox Code Playgroud)

这些gravity阈值是否有意义是有点主观的.您也可以,而不是仅仅查看手机是否大致垂直握持,查看其他加速度计数据(例如,他们是否提升了对象).似乎有很多方法可以给猫皮肤.