我有一个IOS 8-only应用程序,我想在其中使用位置服务获取设备的纬度和经度。我认为我已经正确地实现了所有功能,但应用程序从未询问用户是否可以使用位置服务,CLAuthorizationStatus从未从kCLAuthorizationStatusNotDetermined和CLLocationManager委托方法更改
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
从未接到过电话。
下面是在视图控制器的接口文件中定义的CLLocationManager:
__strong CLLocationManager *locationManager;
这是视图控制器中的代码:
- (void)viewDidLoad{
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined) {
[locationManager requestWhenInUseAuthorization];
}
[locationManager startUpdatingLocation];
//... other viewDidLoad code
}
信息。应用程序的plist文件有一个NSLocationWhenUsageDescription条目。
调试跟踪显示该行
[locationManager requestWhenInUseAuthorization];
已执行,但请求用户确认位置服务的对话框未显示。
此应用程序中的位置服务在iOS 7下正常工作-我显然做错了什么,或者没有做一些我需要做的事情,以使其在iOS 8下正常工作。但我一直在四处寻找真知灼见,在我看来,似乎我做的每件事都是正确的。
任何想法和/或建议?提前感谢。
我找到了解决办法,虽然我不知道为什么。我意识到我有重复的信息。plists位于应用程序文件夹的不同文件夹中。这两个信息。plists看起来完全相同,都与nsLocationWhenUsageDescription条目相同。但当我删除了应用程序导航窗口中未提及的应用程序时,该应用程序开始像广告中所宣传的那样工作:获得了请求警报、允许的位置服务和标题开始更新。不知道为什么会有相同的重复信息。plist不包括在应用程序的构建中,会导致这个问题,但似乎是这样。
首先,检查CLLocationManagerDelegate是否定义,然后执行以下操作。
NSString *systenversion=[[UIDevice currentDevice] systemVersion];
if ([systenversion integerValue]>=8.0) {
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
}
[locationManager startUpdatingLocation];
代表们,
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
switch (status) {
case kCLAuthorizationStatusNotDetermined: {
NSLog(@"User still thinking..");
} break;
case kCLAuthorizationStatusDenied: {
NSLog(@"User hates you");
} break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
case kCLAuthorizationStatusAuthorizedAlways: {
[locationManager startUpdatingLocation];//Will update location immediately
[self showAlertWithTitle:@"Success" andMessge:@"Success to get current location"];
} break;
default:
break;
}
}
希望这能奏效。:)
你很接近。让我看看能不能帮上忙。对于iOS 8,您需要首先调用:
[self.locationManager requestWhenInUseAuthorization];
我建议您在代码行后面加上这句话:locationManager。代表=自我
(然后删除viewDidLoad
方法中的所有其他内容)。这与iOS 7不同,因为它包含了所有新的隐私内容。在调用此方法的委托回调之前,不要调用startUpdatingLocation
。如果阅读文档,您将看到方法requestwhenuseauthorization
,完成后调用其回调方法:
locationManager:didChangeAuthorizationStatus:
在回调方法中,检查状态并根据该值采取行动。这就是我的方法的样子:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if(status == kCLAuthorizationStatusAuthorized || status == kCLAuthorizationStatusAuthorizedWhenInUse)
{
[self.locationManager startUpdatingLocation];
}
}
请记住,您不会每次都看到询问应用程序是否可以使用您的位置的警报。你看过一次以后,它就不会再出现了。然后,用户可以控制应用程序是否可以访问他/她在设备设置应用程序中的位置。
问题内容: 我对使用Firebase及其位置库GeoFire感到很陌生。目前,我在构造数据时遇到一些问题。 目前,我的数据库是这样的: 我想查询当前登录用户附近的用户。为此,我无法理解必须指定的路径。 目前,我正在这样做(但这不起作用): 保存当前位置 检索附近的其他用户 更新 保存当前位置 检索附近的其他用户 问题答案: 对于GeoFire,您必须在仅包含地理位置的树中保留一个分段,然后在树中保
注册WhatsApp时,您需要输入您的电话号码。WhatsApp已经知道(不知何故)您所在的国家,并为您预先选择了该国家,因此您只需确认即可。 有鉴于此,whatsapp没有要求获得访问您所在位置的许可,但他们仍然知道(可能是含糊不清)。这是怎么回事?
我们试图在wifi禁用时测试应用程序的优先级高精度和位置更新。 如果用户在没有wifi网络可用的地方移动,也会出现同样的问题。 我认为正确的行为是使用其他手机传感器(如GPS)更新位置,如果手机不能更新位置与WiFi。 你能提供什么工作? 我们不想使用优先高精度,因为它会耗尽手机电池。我们的应用程序跟踪手机位置,它不应该取决于wifi设置和wifi网络可用性。
我有多个应用程序实例,根据位置使用不同的Azure应用服务计划。是否可以根据用户的位置将其重定向到不同的应用服务实例?(即来自西班牙的用户将被重定向到西欧应用服务,而来自美国的用户将被重定向到北美应用服务实例)。
我不需要精确的位置数据,也不希望用户看到“此应用程序想要确定您的位置”警报。我只需要确定用户的国家,假设他们通过网络或wi-fi连接互联网。 最好的方法是什么?有没有办法使用他们的IP? 这只有在他们有承运人的情况下才有效: 而且不可靠,因为用户可以在设备设置中更改它。出于同样的原因,无法使用设备的语言设置。我需要基于他们实际所在地的国家。
我需要每1分钟和每5米位移更新一次熔合位置(我知道这是一个错误的做法,但为了测试和在日志中显示),并且我在按下按钮后立即启动服务,我在logcat中获得位置,但只有一次。根据服务级别,onLocationChanged应该每1分钟调用一次,但它不会再次调用,即使我的GPS几乎每分钟打开一次,然后在之后关闭,但Logcat中仍然没有位置更新。我需要服务类来保持更新位置,而不影响UI或主线程 这是只显