CLLocationManager 是不是可以在没有互联网/蜂窝连接的情况下工作?
Posted
技术标签:
【中文标题】CLLocationManager 是不是可以在没有互联网/蜂窝连接的情况下工作?【英文标题】:Does CLLocationManager work without internet/cellular connection?CLLocationManager 是否可以在没有互联网/蜂窝连接的情况下工作? 【发布时间】:2011-09-08 10:44:56 【问题描述】:愚蠢的问题!虽然我想知道 CLLocationManager 是否有可能在没有互联网的情况下工作?????
即iPhone 根本没有连接到互联网
【问题讨论】:
【参考方案1】:iPhoneiPadDev 的回答有点错误:虽然位置管理器有时会失败,但它可以在没有网络连接的情况下工作。如果您想亲眼看看,请开车去蜂窝接收信号很差或根本不存在的地方开车:GPS 仍然可以工作。
这在很大程度上取决于您周围的环境条件以及您使用的设备。 iPod Touch 和一些 iPad 没有 GPS,并依靠 WiFi 热点来确定其位置数据。如果您没有网络访问权限,CLLocationManager
将返回无效位置。
iPhone 和 3G iPad确实有 GPS,因此您可能会得到一个合适的位置返回。 但是,他们使用 A-GPS(辅助 GPS),它使用来自网络的信息来实现更快的 GPS 锁定。如果您没有互联网连接,GPS 芯片可能需要一些时间才能获得信号并提供准确的位置:如果您在室内或看不到天空,准确度可能会大大降低。
重点:CLLocationManager
可以并且将返回您的位置,即使没有可用的位置:但是坐标将无效。在使用它们之前测试返回的位置并确保它们是正确的,这一点很重要。
【讨论】:
所以你的意思是说它可能给出错误的位置,但它肯定会给出位置?...? 是的,我认为您必须检查该位置的时间戳,看看它是否已过时。 从其他问题来看,即使手机处于飞行模式也可以使用。即使无法获取新位置,CoreLocation 也会返回其上次保存的位置。【参考方案2】:是的,如果在设备设置中启用了定位服务,它就可以工作。无需互联网连接。
【讨论】:
这在离线模式下对于数英里的旅行是否可靠? 什么是终端设置? @SamiulIslamSami 在设备的设置中,抱歉。我刚刚编辑了回复。【参考方案3】:是的,但在开阔的天空中(指在路上、地面上)。
-
如果您在线,您将从 wifi、移动数据获取位置坐标,然后如果您关闭互联网并更改您的位置(远离该位置),假设您现在在大楼(3 楼),那么您将不会获取正确的位置更新,而不是获取缓存坐标。
解决这个问题:
当您想要位置时,在离线模式下记录时间戳(比如“RecordDate”),然后比较 didUpdateToLocations: 方法给出的时间戳。
如果 didUpdateToLocations 的时间戳 > Recorded Timestamp 然后使用它
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations
CLLocation *currentLocation = [locations lastObject];
NSLog(@"didUpdateToLocation: %@", currentLocation);
NSDate *eventDate=[[NSUserDefaults standardUserDefaults] objectForKey:@"RecordDate"];
NSComparisonResult result = [currentLocation.timestamp compare:eventDate];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
switch (result)
case NSOrderedAscending:
NSLog(@"Location%@ is greater than %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);
break;
case NSOrderedDescending:
NSLog(@"%@ is less %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);
if (currentLocation != nil)
//Use them
//currentLocation.coordinate.latitude
// currentLocation.coordinate.longitude
break;
case NSOrderedSame:
//Use them
break;
default:
NSLog(@"erorr dates %@, %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);
break;
【讨论】:
【参考方案4】:Core Location 使用许多传感器来获取位置:蓝牙、Wi-Fi、GPS、气压计、磁力计,以及 Apple 所谓的“蜂窝硬件”。 GPS、BLE、气压计和磁力计都不需要数据连接。
【讨论】:
以上是关于CLLocationManager 是不是可以在没有互联网/蜂窝连接的情况下工作?的主要内容,如果未能解决你的问题,请参考以下文章
核心位置,是不是可以在没有 GPS 芯片的情况下向 iPad 提供 GPS/位置日期,以便在 CLLocationManager 类中使用?
有没有办法让 CLLocationManager 进入“空闲”而不是“停止”?
CLLocationManager 始终为 null -Delegate 实现是单例类(NSObject 的子类而不是 UIViewController 的子类)
带有 kCLLocationAccuracyBestForNavigation 的 CLLocationManager 不是很准确
CLLocationManager:有啥方法可以使用 requestAlwaysAuthorization 并且仍然有蓝条?