目前我正在一个项目中工作,其要求是使用wifi网络或蜂窝网络,每隔200米间隔获取当前位置信息,特别是纬度和经度值,而不使用gps,因为它消耗更多的电池寿命。
这是否可以在ios最新版本中使用。
如果有任何想法,请与我分享, 谢谢。
答案 0 :(得分:1)
位置管理器协议参考
1.在Appdelegate
#import <CoreLocation/CoreLocation.h>
在@interface文件
中CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;
并添加协议 CLLocationManagerDelegate 协议。
2.在.m。
中修改这些功能@synthesize locationManager;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = 1.0;
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
// Show an alert or otherwise notify the user
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
}
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
}
注意:如果要在模拟器中调试第一个设置当前位置 在调试---&gt;位置---&gt;自定义位置。
答案 1 :(得分:1)
查看CLLocationManager
,可以告诉您用户所在的位置。
·H
#import <CoreLocation/CoreLocation.h>
@property(nonatomic,retain) CLLocationManager *locationManager;
的.m
- (void)viewDidLoad
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//let the user know the purpose
locationManager.purpose = @"Enable location services";
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
NSLog(@"User latitude: %f",locationManager.location.coordinate.latitude);
NSLog(@"User longitude: %f",locationManager.location.coordinate.longitude);
[locationManager startUpdatingLocation];
}
答案 2 :(得分:1)
只有这样才能获得每隔200米的位置信息,即CLLocationManager的startUpdatingLocation。但它消耗了很多电池。
但是在更改位置时,有一种不同的方式来获取您的位置。
CLLocationManager的startMonitoringSignificantLocationChanges。
这是Link
答案 3 :(得分:0)
它的要求是使用wifi网络或蜂窝网络,每200米间隔特别获取当前位置信息,而不使用gps,因为它消耗更多的电池寿命
CLLocationManager
的文档说明距离和GPS硬件:
...将位置事件的所需精度设置为1公里,使位置管理员可以灵活地关闭GPS硬件并完全依赖WiFi或手机无线电。
在不到200米的距离内,你可能需要在这里推出自己的解决方案。
答案 4 :(得分:0)
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[locationManager stopUpdatingLocation];
[locationManager stopMonitoringSignificantLocationChanges];
[self performSelector:@selector(stopUpadateLocation)];
CLLocation *location = [locationManager location];
CLLocationCoordinate2D coord;
coord=[location coordinate];
NSLog(@"coord %f %f", coord.latitude, coord.longitude);
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%f,%f&output=json", newLocation.coordinate.latitude, newLocation.coordinate.longitude];
NSURL *url = [NSURL URLWithString:urlString];
NSString *locationString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSDictionary *dic=[locationString JSONValue];
NSLog(@"locationString:%@",locationString );
[strAddr setString:[AppUtility removeNull:[NSString stringWithFormat:@"%@",[[[dic valueForKey:@"Placemark"] objectAtIndex:0] valueForKey:@"address"]]]];
[txtNear setText:strAddr];
}
- (void)startUpdateLocation{
[locationManager startUpdatingLocation];
}
- (void)stopUpadateLocation{
[locationManager stopUpdatingLocation];
[locationManager stopMonitoringSignificantLocationChanges];
}
答案 5 :(得分:0)
您必须使用仅使用wifi或蜂窝网络的核心位置方法startMonitoringSignificantLocationChanges
!