因为我需要用户在后台的位置,并且我正在获取用户的位置didUpdateLocation
。但正因为如此,它会消耗更多的电池。
我已经startMonitoringSignificantLocationChanges
在后台方法中实现了,但据我说didUpdateLocation
没有工作。
任何解决方案,这样我就可以消耗低电池电量并经常获取用户的更新位置。
因为我需要用户在后台的位置,并且我正在获取用户的位置didUpdateLocation
。但正因为如此,它会消耗更多的电池。
我已经startMonitoringSignificantLocationChanges
在后台方法中实现了,但据我说didUpdateLocation
没有工作。
任何解决方案,这样我就可以消耗低电池电量并经常获取用户的更新位置。
“didUpdateLocation 。但由于这个原因,它会消耗更多的电池。”
这并不完全正确。您可以使用 didUpdateLocation 调整所需的精度级别。根据您想要的精度,您的设备将仅使用蜂窝位置数据,而不是始终打开本机 GPS 接收器,例如:
更低的电池消耗和 500 米的精度
CLLocationAccuracy myaccuracy = 500.00;
您可以获得的最大精度和最大电池消耗(需要将设备插入充电器)
CLLocationAccuracy myaccuracy = -1.0;
如果您不确定要选择哪个值,也可以使用常量:
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; <-- 表示 -1.0
extern const CLLocationAccuracy kCLLocationAccuracyBest;
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
现在回答你的问题:
didUpdateLocation 仅在您要求 locationManager 启动更新位置时才有效。
当您使用 startMonitoringSignificantLocationChanges 时,您不会从 GPS 单元获得任何信息。使用此方法时,一旦您的手机从一个基站切换到另一个基站(例如乘火车或汽车旅行),您的应用就会被唤醒。当你的应用被它唤醒时,你需要实现:
id locationValue = [launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey];
if (locationValue) {
NSLog(@"locationValue received, now needs to start updateLocation again");
//your code goes here
}
在你的里面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
然后,您可以再次启动常规 startUpdatingLocation 以接收 didUpdateLocation 通知。或者,您可以查看 Apple 的文档并查看启动选项是否在应用启动时携带任何位置信息。