0

我正在编写一个通知中心小部件,它必须使用位置信息。在普通应用程序中,我使用 CoreLocation 并且效果很好。但是在我的小部件中,我尝试了locationServicesEnabled但它没有转到回调函数,并且authorizationStatus总是kCLAuthorizationStatusNotDetermined,并且授权设置没有出现在Setting -> location service中。我已经将代表设置为班级。

系统的 Yahoo 天气小部件可以自动定位,并且它也使用 CoreLocation,因此该小部件确实具有使用位置服务的能力。

为什么 CoreLocation 在我的小部件上不起作用?


更新:2012.10.24 15:52

我使用私有 API

[CLLocationManager setAuthorizationStatus:YES 
                                forBundle:[NSBundle bundleForClass:self.class]]

现在,授权设置显示在设置->位置服务中。每次我拉下通知中心,它都会打开。但是authorizationStatus仍然kCLAuthorizationStatusNotDetermined不会去回调函数。


更新时间:2012.10.25 10:38

我将定位代码更改为:

[CLLocationManager setDefaultEffectiveBundle:[NSBundle bundleForClass:self.class]];
[_locationManager startUpdatingLocation];

如果我关闭定位服务,它会跳转到

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

如果我打开服务,无论我是否授权,都没有回调(两者

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

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

不会被调用)。

顺便说一句,当我打开/关闭服务时,

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

将被调用,但在我更改授权状态时不会被调用。

4

1 回答 1

0

可能是因为 WeeAppPlugin 包不是一个有效的包,导致小部件无法使用位置服务。在我使用[[CLLocationManager alloc] initWithEffectiveBundle:[NSBundle bundleForClass:self.class]]CoreLocation 的私有 API 后,小部件可以正常获取位置信息。

于 2012-10-26T02:58:55.350 回答