2013-02-05 61 views
2

目前我正在一個項目中工作,其要求是使用wifi網絡或蜂窩網絡在每200m間隔內獲取當前位置信息的特定經度和緯度值不使用GPS,因爲它消耗更多的電池壽命。如何獲取當前使用wifi或蜂窩電話的位置信息,而無需在ios中使用GPS

這是可能的ios最新版本。

如果任何人有任何想法,請與我分享, 謝謝。

+0

我不確定您是否可以在不使用gps的情況下使用蜂窩網絡獲取用戶位置 – Will

回答

1

位置管理器協議參考

https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html

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 
{ 
} 

注意:如果你想調試模擬器 首先設置當前位置在調試--->位置--->自定義位置。

2

查看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]; 
} 
1

它只有這樣,才能在每一個200米是CLLocationManager的startUpdatingLocation您的位置信息。但是它耗費了大量的電池。

但是有一種不同的方式來獲取您的位置,當它改變。

CLLocationManager的startMonitoringSignificantLocationChanges。

這裏是一個Link

0

其要求是使用WiFi網絡或蜂窩網絡,以獲得當前的位置信息在每200米間隔專門的緯度和經度值,而不使用GPS,因爲它會消耗更多的電池壽命

CLLocationManager的文檔已經這樣說的距離和GPS硬件:

...將定位事件的理想精度設置爲1公里,可以讓位置管理員靈活地關閉GPS硬件並僅依靠WiFi或小區無線電。

對於不到200米,您可能需要在此處推出自己的解決方案。

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]; 

}

0

您必須使用核心定位方法startMonitoringSignificantLocationChanges它僅使用WiFi或蜂窩網絡!

+0

這不會提供所需的準確性:文檔說不要期望更新,除非用戶移動了500米。 –

+0

這是僅使用蜂窩網絡的唯一方法。 – CainaSouza

相關問題