以编程方式设置 Info.plist 是或否



嗨,堆栈溢出开发人员,我有一个问题,如何将我的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.
    }
}

最新更新