iOS7到IOS8中当前位置纬度和经度的不同行为

时间:2014-09-20 21:51:03

标签: ios ios7 gps xamarin locationmanager

将xamarin用于当前位置currentLocation example 我使用上面的链接获取当前位置的纬度和经度 在升级到IOS 8之前的IOS 7中它在模拟器和设备上显示我当前位置的纬度和经度。(在模拟器中看起来很奇怪我获取当前位置的纬度和经度)。

升级到iOS 8并运行相同的代码后,它会给出

在模拟器中:(始终打开wifi无SIM卡位置服务应用程序。)

Result:
latitude = 37.785834.
longitude = -122.406517.

在设备IPhone5c上(始终打开wifi无SIM卡位置服务应用程序。)

Result:
latitude = 37.785834.
longitude = -122.406517.

(但我预计我当前的位置纬度和经度)

升级后它没有问,该应用程序就像使用你的当前位置GPS。带有YES,NO选项的警报消息。

如何获取当前位置的纬度和经度?

4 个答案:

答案 0 :(得分:6)

您需要从iOS 8.0开始明确请求权限。这样做的步骤:

  1. 更新您的Info.plist文件。插入新密钥: NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription 密钥,并编写将在您的应用请求权限时显示的自定义消息。
  2. 必须在plist文件中包含这些键中的任何一个,否则将不会显示权限请求!如果您不想在alertview中显示自定义说明文本,请将键的值字符串保留为空,但仍必须在Info.plist文件中显示该键!

    1. 在开始跟踪之前,检查您是否在iOS8上,然后从CLLocationManager实例发送RequestAlwaysAuthorization或RequestWhenInUseAuthorization。例如:

      var locationManager = new CLLocationManager();
      if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
          locationManager.RequestAlwaysAuthorization();
      }
      
    2. 在这种情况下,请使用Info.plist文件中的NSLocationAlwaysUsageDescription键。请注意,Xamarin Studio目前不会从下拉列表中自动为您提供此密钥,您必须在此处手动输入/复制粘贴此密钥。

答案 1 :(得分:0)

在方法LocationManager

中添加LocationManger.cs文件
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    this.locMgr.RequestAlwaysAuthorization();
}

更改后

public LocationManager ()
{
    this.locMgr = new CLLocationManager();
    LocationUpdated += PrintLocation;
    if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
        this.locMgr.RequestAlwaysAuthorization();
    }
}

手动添加信息Plist NSLocationAlwaysUsageDescription空字符串。

然后清理构建并运行应用程序。它显示了我当前的位置纬度和longtidu。

答案 2 :(得分:0)

我尝试了以上解决方案但是没有用。问题是当您定位IOS> = 9.0时,位置管理器会更改一些权限变量,这些变量应该在info.pList中明确提及。

<key>NSLocationWhenInUseUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationWhileInUsage</key>
<string>Why you need Location</string>

如果要在9.0之前和之后定位所有版本,请使用这四个键。

另请注意,此行表示用户是处于前台还是后台使用位置(苹果不鼓励这样做,因为它具有隐私权)check documentation here

[locationManager requestAlwaysAuthorization];

而这意味着,

[locationManager requestWhenInUseAuthorization];

仅在应用处于前台check documentation here

时使用

答案 3 :(得分:0)

使用iOS模拟器时,您需要设置模拟器硬件的自定义位置。转到“调试”,选择位置,自定义位置,然后设置首选坐标。