第一,我们要导入苹果自带的库

#import <MapKit/MapKit.h>

第二,我们要创建对象

@property (strong,nonatomic) CLLocationManager* locationManager;

第三,我们要遵守协议

@interface LocationViewController :UIViewController<CLLocationManagerDelegate>

第四,我们要配置Info.Plist,添加一下两个字段,

Privacy - Location When In Use Usage Description   后面为字符串类型(随意填写) 例如:请您允许,我们将会为您提供更精确的信息

Privacy - Location Always Usage Description        后面为字符串类型(随意填写)例如:请您允许,我们将会为您提供更精确的信息 // 特别声明一下,这个字段的添加要看你的需求,这个功能是指在后台时也可以时时定位,所以app如果不需要的话,不建议添加,否则上线审核会出现问题,如果需要需要做一些声明描述:GPS在后台持续运行,可以大大降低电池的寿命。

效果图如下:

第五,接下来就是大家最喜欢的粘代码

//开始定位
-(void)startLocation{self.locationManager = [[CLLocationManager alloc] init];self.locationManager.delegate = self;self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;self.locationManager.distanceFilter = 100.0f;if ([[[UIDevice currentDevice]systemVersion]doubleValue] >8.0){[self.locationManager requestWhenInUseAuthorization];}if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {_locationManager.allowsBackgroundLocationUpdates =YES;}[self.locationManager startUpdatingLocation];
}- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {switch (status) { case kCLAuthorizationStatusNotDetermined:if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {[self.locationManager requestWhenInUseAuthorization];}break;default:break;}
}- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {CLLocation *newLocation = locations[0];CLLocationCoordinate2D oldCoordinate = newLocation.coordinate;NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude);[manager stopUpdatingLocation];CLGeocoder *geocoder = [[CLGeocoder alloc]init];[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray<CLPlacemark *> *_Nullable placemarks, NSError * _Nullable error) {for (CLPlacemark *placein placemarks) {NSLog(@"name,%@",place.name);                      // 位置名           NSLog(@"thoroughfare,%@",place.thoroughfare);      // 街道            NSLog(@"subThoroughfare,%@",place.subThoroughfare);// 子街道           NSLog(@"locality,%@",place.locality);              // 市                          NSLog(@"subLocality,%@",place.subLocality);        // 区            NSLog(@"country,%@",place.country);                // 国家if ([JudgeIDAndBankCardisEmptyOrNull:_gpsCityName]) {_gpsCityName=@"定位失败";}}}];}

这样我们就能定位到当前所在城市以及经纬度,在上面的方法可以获取

第六,如果还是获取不到,看看你是不是在模拟器上运行的

第七,如果还是没有解决按照以下图片进行操作到 Capabilities  ——>找到Background Modes 将off改成on 并且勾选 Location updates

这样我们就能定位到当前所在城市以及经纬度,在上面的方法可以获取

到此获取经纬度以及城市名称就完成了

既然用到了定位,那么就有可能用到判断手机给了APP定位权限问题,当然判断着个也要引库和遵守协议

#import <CoreLocation/CLLocationManager.h>CLLocationManagerDelegate

下面就是判断是否打开了定位权限。返回YES代表没打开,我们需要提使用用户


+ (BOOL)openLocationServiceWithBlock {if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized)) {return NO;} else {return YES;}
}
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"alert_title", @"提示") message:NSLocalizedString(@"Opne_location_serive", @"定位服务未开启,请进入系统[设置]> [隐私] > [定位服务]中打开开关,并允许使用定位服务。") delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", @"取消") otherButtonTitles:NSLocalizedString(@"SetUp", @"设置"), nil];
[alertView show];

点击确定按钮我们自动跳转到设置页面去设置即可


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{if ( buttonIndex == 1 ) {NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];[[UIApplication sharedApplication] openURL:settingsURL];}
}

iOS 自带定位CLLocationManager获取经纬度以及城市名称,并判断是否打开定位权限相关推荐

  1. vue怎么获取用户的位置经纬度_vue 实现Web端的定位功能 获取经纬度

    首先我这里的需求呢, 是获取当前用户的经纬度 经过无数次的测试, 先后用了 腾讯/百度地图的api,最后绝对还是高德的js APi 废话不多说, 直接上代码. 首先在 index.html 里面 引入 ...

  2. uniapp判断是否打开定位GPS

    uniapp判断是否打开定位GPS function checkOpenGPSServiceByAndroid() {let system = uni.getSystemInfoSync(); // ...

  3. 百度api通过经纬度转换为城市名称

    //经纬度转城市名称(返回城市id,城市名称) //$ak百度开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$ ...

  4. 利用百度地图Android定位SDK获取经纬度

    环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...

  5. Android 集成高德定位功能,获取经纬度,城市至门牌号码

    老规矩,上效果图,先给你们看下效果: 虽然打上了马赛克,但是装到别人手机上还是看着很爽啊; 友善提醒:禁止用作非法用途 首先进入高德地图开放平台 先要下载高德的定位SDK包,这里就不演示了 1.--- ...

  6. 微信小程序:获取地理定位和显示相应的城市名称。

    最近在看微信小程序,遇到地理定位显示城市名称的问题.本文就是记录这一过程. 解决方案                                                          ...

  7. 【前端】【H5 API】地理定位(获取经纬度)

    H5 API 地理定位 地理定位在日常生活中应用比较广泛,例如,互联网打车.在线地图等.在HTML 5的规范中,增加了获取用户地理位置信息的接口Geolocation,开发者可以通过经纬度来获取用户的 ...

  8. html5经纬度定位 源码_利用HTML5定位功能获取经纬度,在根据经纬度利用百度地图获取位置信息...

    一.引入相关js 二.js代码 // 单次位置请求执行的函数 function getLocation(){ navigator.geolocation.getCurrentPosition(mapI ...

  9. java编写的获取中国所有城市名称的网络爬虫

    package cn.com.crawler.utils;import java.io.BufferedReader; import java.io.IOException; import java. ...

最新文章

  1. iptables下开放ftp连接端口
  2. 【Qt】Qt中QJsonValue类
  3. jq遍历子元素_leetcode第196周赛第三题统计全 1 子矩形
  4. 【实践】小红书推荐中台实践
  5. 处理Excel电子表格
  6. 数组做函数参数的退化问题
  7. vscode还用装git_使用vscode实现git同步
  8. 实现在web应用程序里有事件的页面添加到sharepoint里
  9. AI芯片最重要的是什么?Arm中国:背后的软件生态
  10. php文本生成图片,php文本文字创建生成图片_PHP教程
  11. 怎么下载思维导图模板呢?
  12. dell服务器安装系统加载驱动,DELL服务器使用U盘加载驱动安装Win2003.doc
  13. shell实现加密压缩文件自动解压
  14. 2022 我勇敢地走过
  15. OSSIM开源安全信息管理系统(六)
  16. 数字图像处理 第五章图像复原与重建
  17. 影像分析器之:波形示波器
  18. 对PHM铣刀磨损数据进行分析
  19. java氧气版,氧气呼吸器属于( )。
  20. 运放脉冲宽度放大_下一代Ka波段雷达系统应用脉冲行波管放大器(twta),工作频率为34至36GHz,峰值功率为1000瓦,占空比为10%。...

热门文章

  1. easyui下拉列表Onclick事件实现全选反选
  2. 超级弱口令工具破解SMTP/POP3
  3. HTTP和HTTPS的区别详解
  4. 小米血压计的5大亮点和1大“缺陷”
  5. python念数字的题目_Python挑战100题(31~33)
  6. 关于Swagger报错java.lang.NumberFormatException: For input string: 的总结
  7. linux socket常用命令
  8. CI1302智能语音芯片应用于智能玩具,可实现离线语音交互功能,响应快,童音识别率高
  9. 开发者技术网站以及一些好的iOS博主的主页
  10. CH32V307移植LVGL Master及Code::Blocks仿真笔记