目前我正在一個項目中工作,其要求是使用wifi網絡或蜂窩網絡在每200m間隔內獲取當前位置信息的特定經度和緯度值不使用GPS,因爲它消耗更多的電池壽命。如何獲取當前使用wifi或蜂窩電話的位置信息,而無需在ios中使用GPS
這是可能的ios最新版本。
如果任何人有任何想法,請與我分享, 謝謝。
目前我正在一個項目中工作,其要求是使用wifi網絡或蜂窩網絡在每200m間隔內獲取當前位置信息的特定經度和緯度值不使用GPS,因爲它消耗更多的電池壽命。如何獲取當前使用wifi或蜂窩電話的位置信息,而無需在ios中使用GPS
這是可能的ios最新版本。
如果任何人有任何想法,請與我分享, 謝謝。
位置管理器協議參考
1.In的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
{
}
注意:如果你想調試模擬器 首先設置當前位置在調試--->位置--->自定義位置。
查看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];
}
它只有這樣,才能在每一個200米是CLLocationManager的startUpdatingLocation您的位置信息。但是它耗費了大量的電池。
但是有一種不同的方式來獲取您的位置,當它改變。
CLLocationManager的startMonitoringSignificantLocationChanges。
這裏是一個Link
其要求是使用WiFi網絡或蜂窩網絡,以獲得當前的位置信息在每200米間隔專門的緯度和經度值,而不使用GPS,因爲它會消耗更多的電池壽命
爲CLLocationManager
的文檔已經這樣說的距離和GPS硬件:
...將定位事件的理想精度設置爲1公里,可以讓位置管理員靈活地關閉GPS硬件並僅依靠WiFi或小區無線電。
對於不到200米,您可能需要在此處推出自己的解決方案。
- (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];
}
您必須使用核心定位方法startMonitoringSignificantLocationChanges
它僅使用WiFi或蜂窩網絡!
這不會提供所需的準確性:文檔說不要期望更新,除非用戶移動了500米。 –
這是僅使用蜂窩網絡的唯一方法。 – CainaSouza
我不確定您是否可以在不使用gps的情況下使用蜂窩網絡獲取用戶位置 – Will