【问题标题】:iPhone Turn off GPS with Objective-CiPhone 使用 Objective-C 关闭 GPS
【发布时间】:2016-01-06 14:39:45
【问题描述】:

有人知道如何以编程方式关闭 iPhone 的 GPS 吗?一旦我使用 CLLocationManager 读取我的位置的三个读数,我就会停止更新位置,如下面的代码所示:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation {

if((newLocation.horizontalAccuracy >  0.0f) &&
   (newLocation.horizontalAccuracy < 7000.0f) ){

    if(self.locations.count > 3){
        [self.locationManager stopUpdatingLocation];
    }
    [self.locations addObject:newLocation];
}

但是,当用户使用我的应用程序并耗尽电池电量时,这似乎仍然让 GPS 保持开启状态。我需要做的就是读取位置三遍,以便准确读取,然后关闭 GPS。有人知道如何用 Objective-C 关闭 GPS 吗?

【问题讨论】:

  • 停止更新后,请确保释放您的位置管理员。如果您需要重新开始更新,请重新创建它。这意味着您的准确性将再次开始变差,但应用程序将能够更快地关闭硬件。

标签: iphone gps


【解决方案1】:

stopUpdatingLocation 为位置管理器提供关闭硬件的选项,但不能保证。它应该在没有其他人需要时关闭硬件。在实践中,它似乎按预期工作。

是否有可能 stopUpdatingLocation 永远不会被调用?在您上面的 sn-p 中,您的代码从不执行该调用似乎不是不合理的。

【讨论】:

  • 第二。你确定那个电话正在发生吗?
  • 是的,我在调试器中对其进行了测试,并且在 self.locations.count 达到 4 后调用了 stopUpdatingLocation。
【解决方案2】:

我想知道您是否需要额外的一行来:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

停止位置管理器。这就是我使用的,很多地方都有这两条线。祝你好运。

【讨论】:

  • 要重新启动位置管理器,只需添加此代码-- [self.locationManager startUpdatingLocation]; self.locationManager.delegate=self;
【解决方案3】:

Apple 文档说,如果您的位置精度超过一公里,位置管理器将关闭 GPS 硬件:

例如,将位置事件的所需精度设置为一公里,位置管理器可以灵活地关闭 GPS 硬件并仅依赖 WiFi 或蜂窝无线电。关闭 GPS 硬件可以显着节省电力。 来自CLLocation class references

请注意,您应该只使用标准(不重要)位置更改跟踪。

【讨论】:

    【解决方案4】:

    第三方应用程序不应该触及硬件设置,所以我猜你不能这样做。

    【讨论】:

      【解决方案5】:

      stopUpdateLocation 方法应该具有预期的效果。您是否尝试过它是否被调用(您可以通过在该行设置断点来做到这一点)。

      【讨论】:

      • 是的,我在调试器中对其进行了测试,并且在 self.locations.count 达到 4 后调用了 stopUpdatingLocation。
      【解决方案6】:

      对我来说,是我的地图实例显示了保持 GPS 运行的用户位置。对于尝试上述所有方法但没有任何运气的人来说,这可能是一个提示。

      这是我的 stopGPS() 函数:

      -(void) stopGPS
      {
         NSLog(@"Stopgps");
      
         myMap.delegate = nil;
         myMap.showsUserLocation = NO;
         myMap = nil;
      
         [locationManager stopMonitoringSignificantLocationChanges];
         [locationManager stopUpdatingHeading];
         [locationManager stopUpdatingLocation];
         locationManager.delegate = nil;
         locationManager = nil;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多