iOS7到IOS8中当前位置纬度和经度的不同行为
使用xamarin作为当前位置currentLocation示例我使用上面的Link获取当前位置的纬度和经度。
在升级到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选项的警报消息。
如何获取我当前的位置纬度和经度?
您需要从iOS 8.0开始明确请求权限。 这样做的步骤:
- 更新Info.plist文件。 插入新密钥: NSLocationAlwaysUsageDescription或NSLocationWhenInUseUsageDescription密钥,并编写将在您的应用请求权限时显示的自定义消息。
必须在plist文件中包含这些键中的任何一个,否则将不会显示权限请求! 如果您不想在alertview中显示自定义说明文本,请将键的值字符串留空,但仍必须在Info.plist文件中显示该键!
-
在开始跟踪之前,请检查您是否在iOS8上,然后从CLLocationManager实例发送RequestAlwaysAuthorization或RequestWhenInUseAuthorization。 例:
var locationManager = new CLLocationManager(); if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) { locationManager.RequestAlwaysAuthorization(); }
在这种情况下,请使用Info.plist文件中的NSLocationAlwaysUsageDescription键。 请注意,Xamarin Studio目前不会从下拉列表中自动为您提供此密钥,您必须在此处手动输入/复制粘贴此密钥。
为方法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(); } }
手动添加Info Plist NSLocationAlwaysUsageDescription空字符串。
然后清理构建并运行应用程序。 它显示了我当前的位置纬度和longtidu。
我试过上面的解决方案但是没有用。 问题是当您定位IOS> = 9.0时,位置管理器会更改一些权限变量,这些变量应该在info.pList中明确提及。
NSLocationWhenInUseUsageDescription Why you need Location NSLocationAlwaysAndWhenInUseUsageDescription Why you need Location NSLocationAlwaysUsageDescription Why you need Location NSLocationWhileInUsage Why you need Location
如果要在9.0之前和之后定位所有版本,请使用这四个键。
另请注意,此行表示用户是在前台还是后台使用位置(苹果不鼓励这样做,因为它有潜在的隐私)
[locationManager requestAlwaysAuthorization];
这意味着,
[locationManager requestWhenInUseAuthorization];
仅在app处于前台检查文档时使用此处
使用iOS模拟器时,您需要为模拟器硬件设置自定义位置。 转到“调试”,选择位置,自定义位置,然后设置首选坐标。