添加更具体的要求:
当用户将手机放在耳边时,我想让屏幕变暗.我知道可以启用接近传感器来实现这一点.但令人讨厌的是,当用户将手指移到传感器上时,屏幕会不时变暗.所以我想知道如何避免这种情况,只有当用户抬起iphone说话时才会使屏幕变暗?
>启用它:
UIDevice *device = [UIDevice currentDevice];device.proximityMonitoringEnabled = YES;
>检查是否成功启用;如果成功,请遵守UIDeviceProximityStateDidChangeNotification
通知;如果没有,您的设备可能无法使用:
if (device.proximityMonitoringEnabled){ [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(handleProximityChange:) name:UIDeviceProximityStateDIDChangeNotification object:nil];}else{ // device not capable}
>并编写你的选择器:
- (voID)handleProximityChange:(NSNotification *)notification{ NSLog(@"%s proximityState=%d",__FUNCTION__,[[UIDevice currentDevice] proximityState]);}
为了检测用户是否将其握在脸上,我可能会将接近传感器与cmmotionmanager结合并查看重力属性,看看他们是否几乎垂直握住手机.因此,定义一些类属性:
@property (nonatomic,strong) cmmotionmanager *motionManager;@property (nonatomic,strong) NSOperationQueue *deviceQueue;
然后您可以启动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; }}];
这些重力阈值是否有意义是有点主观的.您也可以,而不是仅仅查看手机是否大致垂直握持,查看其他加速度计数据(例如,他们是否提升了对象).似乎有很多方法可以给猫皮肤.
总结以上是内存溢出为你收集整理的ios – 有没有办法监控用户的iphone移动,如“提高说话”功能?全部内容,希望文章能够帮你解决ios – 有没有办法监控用户的iphone移动,如“提高说话”功能?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)