Saroj Kumar ojha
Saroj Kumar ojha

Reputation: 485

How to get current Location info using wifi or cellular without using GPS in ios

Currently I am working in a project , its requirement is to get the current location information specially latitude and longitude value in every 200m interval using wifi network or Cellular network without using gps as it is consuming more battery life.

Is this possible in ios latest version .

If any one having any idea ,please share with me , Thank you.

Upvotes: 2

Views: 6617

Answers (6)

CainaSouza
CainaSouza

Reputation: 1437

You have to use the Core Location method startMonitoringSignificantLocationChanges which uses only the wifi or cellular networks!

Upvotes: 0

Justin Mathews
Justin Mathews

Reputation: 512

The location manager protocol reference

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

1.In Appdelegate

#import <CoreLocation/CoreLocation.h>

In @interface file

CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;

and add protocol CLLocationManagerDelegate protocol.

2.Impliment these functions in .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
{
}

Note:If you want to debug first set current location in simulator At Debug--->Location--->Custom Location.

Upvotes: 1

David Pitt
David Pitt

Reputation: 1

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

}

Upvotes: 0

ta.speot.is
ta.speot.is

Reputation: 27214

its requirement is to get the current location information specially latitude and longitude value in every 200m interval using wifi network or Cellular network without using gps as it is consuming more battery life

The documentation for CLLocationManager has this to say about distance and the GPS hardware:

... setting the desired accuracy for location events to one kilometer gives the location manager the flexibility to turn off GPS hardware and rely solely on the WiFi or cell radios.

For less than 200 meters you'll probably need to roll-your-own solution here.

Upvotes: 0

Oh Seung Kwon
Oh Seung Kwon

Reputation: 431

It only way to get your location info in every 200m that is CLLocationManager's startUpdatingLocation. But it is comsuming a lot of battery.

But there is a little different way to get your location when it is changed.

CLLocationManager's startMonitoringSignificantLocationChanges.

Here is a Link

Upvotes: 1

Will
Will

Reputation: 3044

Have a look in to CLLocationManager, That will be able to tell you where the user is located.

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

Upvotes: 1

Related Questions