XMPP-利用CoreLocation获取地理位置以及CLLocationManager 为什么就不调用代理

最近做基于XMPP的即时通讯,把相关内容总结整理下来看看!

一.利用CoreLocation获取地理位置

利用CoreLocation,必须在frameworks里面加入"CoreLocation.framework",然后类中import <CoreLocation/CoreLocation.h>

1.定义成员变量

#import "LocationHelper.h"
@interface LocationHelper ()<CLLocationManagerDelegate>
{
    CLLocationManager *_locationManager;
}
@property(nonatomic,copy)GetLocationCompledBlock getLocationCompledBlock;

2.实现单例

#pragma mark - shareLocationHelper单例

+ (id)shareLocationHelper{
    static LocationHelper *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[LocationHelper alloc] init];
    });
    return instance;
}

3.进行初始化CLLocationManager位置管理器

- (void)setup {
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    _locationManager.distanceFilter = 5.0;
    [_locationManager requestAlwaysAuthorization];
}

desiredAccuracy为设置定位的精度,可以设为最优,装置会自动用最精确的方式去定位。

distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序,它的单位是米,这里设置为移动5再通知委托处理更新

4.实现外界要求获取位置的请求

- (void)getCurrentGeolocationsCompled:(GetLocationCompledBlock)compled{
    self.getLocationCompledBlock = compled;
    [_locationManager startUpdatingLocation];
}

在此使用startUpdatingLocation启动定位管理了,一般来说,在不需要更新定位时最好关闭它,用stopUpdatingLocation,可以节省电量。

5.实现CLLocationManagerDelegate代理方法获取位置更新信息

#pragma mark - CLLocationManager Delegate

// 代理方法实现
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    CLGeocoder* geocoder = [[CLGeocoder alloc] init];

    [geocoder reverseGeocodeLocation:newLocation completionHandler:
     ^(NSArray* placemarks, NSError* error) {
         if (self.getLocationCompledBlock) {
             self.getLocationCompledBlock(placemarks);
         }
     }];
    [manager stopUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    [manager stopUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        casekCLAuthorizationStatusNotDetermined:
            if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
                [_locationManager requestAlwaysAuthorization];
            }
            break;
        default:
            break;
    }
}

6.控制器中调用方法获取位置信息后加TAG发送

[self.locationHelper getCurrentGeolocationsCompled:^(NSArray *placemarksA) {
        CLPlacemark *placemark = [placemarksA lastObject];
        if (placemark) {
            NSDictionary *addressDictionary = placemark.addressDictionary;
            NSArray *formattedAddressLines = [addressDictionary valueForKey:@"FormattedAddressLines"];
            NSString *geoLocations = [formattedAddressLines lastObject];
            if (geoLocations) {
                //geoLocations===中国****
                [weakSelf didSendGeolocationsMessageWithGeolocaltions:geoLocations];
            }
        }
}];

二.CLLocationManager为什么就不调用代理

代码方法开开心心的写完了,但是在发送地理位置消息的时候老是没有消息,郁闷了,断点发现代理根本都没进,最后分析找资料得到解决

上述编码均完成后在Plist文件中添加字段NSLocationAlwaysUsageDescription

时间: 2025-01-07 06:16:22

XMPP-利用CoreLocation获取地理位置以及CLLocationManager 为什么就不调用代理的相关文章

第三天:Swift利用CoreLocation获取当前地址

参考链接:https://www.jianshu.com/p/ade69f95bffc 1 import UIKit 2 import CoreLocation 3 4 class ViewController: UIViewController, CLLocationManagerDelegate { 5 6 @IBOutlet weak var showLocationBtn: UIButton! 7 @IBOutlet weak var locationLabel: UILabel! 8

php利用新浪接口查询ip获取地理位置示例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php function getIPLoc_sina($queryIP){   $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;   $ch = curl_init($url);    curl_setopt($ch,CURLOPT_ENCODING ,'utf8');

微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)

复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1  7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSDK.location = function(locationApi){ 02 if(wxJSSDK.isReady){ //wxJSSDK.isReady 查看微信JSSDK是否初始化完毕 03 if(locationApi){ 04 locationApi.getLocation && wx

地图定位CoreLocation框架,地理位置编码与反编码

在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 这里我们简单了解一下CoreLocation,用于显示地理位置,坐标信息. 一.相关类介绍 CLLocationManager.用于定位服务管理类,它能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向. CLLocation.封装了位置和高度信息. CLL

iOS 利用CoreLocation和MapKit开发搜索附近的商场功能

代码如下: ////  SearchNearbyShopViewController.m//  SearchNearbyShop////  Created by Linzhixiao on 16/2/14.//  Copyright © 2016年 B5m. All rights reserved.// #import "SearchNearbyShopViewController.h"#import <CoreLocation/CoreLocation.h>#import

iOS - 使用CoreLocation获取当前所在城市

在之前的一篇博客-CoreLocation - iOS中的位置信息中, 简单描述了CoreLocation的使用, 并获取经纬度信息. 接下来, 将要从地理位置信息中反向解析出当前所在城市等信息. 首先, 初始化CLLocationManager对象, 设置delegate, 然后startUpdatingLocation即开始定位. 注意: 要继承CLLocationManagerDelegate协议. @property(strong, nonatomic) CLLocationManage

[iOS]获取地理位置信息

1.在工程的 info.plist 文件中增加两个key( 右键 - Add Row ) Privacy - Location Always and When In Use Usage Description Privacy - Location When In Use Usage Description value里输入征求获取位置信息时展示的提示语: 2.在需要获取地理位置信息的文件中 #import <CoreLocation/CoreLocation.h> 在interfce行添加相关

iOS CLGeocoder反地理编码获取地理位置

要得到当前的位置,只需要2步就能完成 1:判断设备是否支持定位功能,然后创建MKMapView if ([CLLocationManager locationServicesEnabled]) { myMapView =[[MKMapView alloc] init]; myMapView.delegate=self; myMapView.showsUserLocation=YES; } 2:实现MKMapViewDelegate协议 -(void)mapView:(MKMapView *)ma

iOS 百度地图获取地理位置名称

目前很多的应用都用到了百度地图这一版本,不过有些方法是我在网上并没有找到的,但是这并不意味着就没有相关的文章介绍,那么这里我所记录的就是百度地图获取地理位置,以及省份,城市,区域,其他的不多说了,直接进入正题吧:       创建地图基本图层 首先,需要到http://dev.baidu.com/wiki/imap/index.php?title=iOS平台/相关下载下载全部内容,包括文档,示例代码和开发包. 然后获取自己的API KEY,具体方法按百度的官网申请就行,比较简单. 下载的文件应该