嗨,堆栈溢出开发人员,我有一个问题,如何将我的Info.plist
设置为可编程是或否。所以我的应用程序支持Backgroung Locaton Update。但正如所有iOS开发人员所知,它会像坚果一样杀死电池。所以我想检测 iphone 是否插入,然后只支持后台 Porcessing,如果没有插入,我们可以用户 [locationmanger startMonitoringSignificant LocationChanges];。感谢您的帮助。
原始问题的答案
OP询问如何停止更新位置,答案是
CLLocationManager
有一个stopUpdatingLocation:
方法。
回答新问题
据我了解,属性列表是您在后台使用定位服务的意图的声明,并且在运行时的可访问性方面是只读的。因此,似乎正确的方法是通过其方法控制CLLocationManager
,例如 stopUpdatingLocation:
和 startMonitoringSignificantLocationChanges:
.
您可以通过以下方法注册电池通知来根据电池状态控制电池状态CLLocationManager
[ [ UIDevice currentDevice ] setBatteryMonitoringEnabled:YES ];
[ [ NSNotificationCenter defaultCenter ] addObserver:self selector:@selector(
reactToBatteryStatus) name:UIDeviceBatteryLevelDidChangeNotification object:nil ];
有了这个,您可以确定手机是否已插入。但是,您应该仅在需要时根据Apple指南注册电池通知。所以要取消注册,请使用
[ [ UIDevice currentDevice ] setBatteryMonitoringEnabled:NO ];
[ [ NSNotificationCenter defaultCenter ] removeObserver:self name:
UIDeviceBatteryLevelDidChangeNotification object:nil ];
然后根据电池状态,您可以执行所需的操作。
+ (void) reactToBatteryStatus {
UIDeviceBatteryState batteryState = [ UIDevice currentDevice ].batteryState;
if ( batteryState == UIDeviceBatteryStateCharging || batteryState == UIDeviceBatteryStateFull )
{
// Device is plugged in.
}
}