ios开发 获取设备GPS信息

1、在Info.plist文件中添加如下配置:

(1)NSLocationAlwaysUsageDescription (value 就是你要显示的提示用户获取gps)

(2)NSLocationWhenInUseUsageDescription (value 就是你要显示的提示用户获取gps)

2.引入CoreLocation.framework

#import < CoreLocation/CoreLocation.h >

让APPcontroller 继承接口 CLLocationManagerDelegate 

AppController :NSObject < UIAccelerometerDelegate,UIAlertViewDelegate,UITextFieldDelegate,UIApplicationDelegate,WXApiDelegate,CLLocationManagerDelegate >


3.添加全局变量 

@property(nonatomic,strong)CLLocationManager*locationManager;

4.在didFinishLaunchingWithOptions方法中调用initGPS, 然后就可以在回调中获取到信息了(获取失败则会调用失败回调);

值得注意的是 在iOS8 以后必须加上:

[locationmanager requestWhenInUseAuthorization];(在使用时获取gps)

或者[locationmanager requestAlwaysAuthorization];(无论是否在使用都获取gps)

- (void) initGps{

locationmanager= [[CLLocationManageralloc]init];

//设置精度

/*

kCLLocationAccuracyBest

kCLLocationAccuracyNearestTenMeters

kCLLocationAccuracyHundredMeters

kCLLocationAccuracyHundredMeters

kCLLocationAccuracyKilometer

kCLLocationAccuracyThreeKilometers

*/

//设置定位的精度

[locationmanager setDesiredAccuracy:kCLLocationAccuracyBest];

//实现协议

locationmanager.delegate=self;

[locationmanager requestWhenInUseAuthorization];

NSLog(@"开始定位");

//开始定位

[locationmanager startUpdatingLocation];

}

//获取定位成功回调

- (void)locationManager:(CLLocationManager*)manager

didUpdateToLocation:(CLLocation*)newLocation

fromLocation:(CLLocation*)oldLocation

{

NSLog(@"hello");

//打印出精度和纬度

CLLocationCoordinate2Dcoordinate = newLocation.coordinate;

NSLog(@"输出当前的精度和纬度");

NSLog(@"精度:%f 纬度:%f",coordinate.latitude,coordinate.longitude);

//停止定位

//[locationmanager stopUpdatingLocation];

//计算两个位置的距离

floatdistance = [newLocationdistanceFromLocation:oldLocation];

NSLog(@" 距离 %f",distance);

}

//获取gps失败回调

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

{

NSLog(@"获取GPS失败!");

if([errorcode] ==kCLErrorDenied)

{

//访问被拒绝

}

if([errorcode] ==kCLErrorLocationUnknown) {

//无法获取位置信息

}

}

//停止获取GPS

- (void)stopUpdateGPS

{

[locationmanagerstopUpdatingLocation];

}

有时候上面的都设置好了,但是还没有回调,有可能是因为不是在主线程里调用的,不能在静态方法里直接调用,因为有可能又开了一个线程来调用这个方法,那这样主线程就收不到回调了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 出自http://my.oschina.net/are1OfBlog/blog/420034 摘要 现在很多社交、...
    JJO阅读 4,177评论 4 19
  • http://www.cnblogs.com/kenshincui/p/4125570.html 摘要: 现在很多...
    大崔老师阅读 3,327评论 1 2
  • 简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 周边:找餐馆、找KTV、找电影院等等 导航:根据...
    JonesCxy阅读 1,267评论 1 1
  • iOS 自带定位服务(原创) ps:本文粘贴自别处,只为学习记录~ 定位服务 iOS 7 提供了4种不同的途径进行...
    西门淋雨阅读 5,990评论 0 3
  • 卷土重来 把我裹进你身体 旋转,升腾 你无处不在 给我留下处处美丽 你是三十九度的风 即刻飞去 抽走我的心 剥离我...
    森旺阅读 164评论 0 1