第一步:
Build Phases->Link Binary With Libaries-> 导入CoreLocation.framework
第二步:
Info->Custom iOS Target Properties-> 添加 NSLocationAlwaysUsageDescription 。NSLocationWhenInUseUsageDescription
第三步:Location.h文件
#ifndef Location_h
#define Location_h
#import <CoreLocation/CoreLocation.h>
@interface Location : UIViewController<CLLocationManagerDelegate>
{
CLLocationManager *_locationManager; //定位服务管理类
}
@end
#endif
第四步:Location.mm文件
#import <Foundation/Foundation.h>
#import "Location.h"
#include "LocationManager.h"
@implementation Location
-(void)initializeLocationService
{
// 初始化定位管理器
_locationManager = [[CLLocationManager alloc] init];
[_locationManager requestWhenInUseAuthorization];
[_locationManager requestAlwaysAuthorization];//iOS8必须,这两行必须有一行执行,否则无法获取位置信息,和定位
// 设置代理
_locationManager.delegate = self;
// 设置定位精确度到米
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// 设置过滤器为无
_locationManager.distanceFilter = kCLDistanceFilterNone;
// 开始定位
[_locationManager startUpdatingLocation];//开始定位之后会不断的执行代理方法更新位置会比较费电所以建议获取完位置即时关闭更新位置服务
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
CLLocation * location = locations.lastObject;
// 纬度
CLLocationDegrees latitude = location.coordinate.latitude;
// 经度
CLLocationDegrees longitude = location.coordinate.longitude;
// 回调
LocationManager::getInstance()->OnResult(latitude, longitude);
[manager stopUpdatingLocation];
}
@end
第五步:c++单例
LocationManager.h
#ifndef LocationManager_h
#define LocationManager_h
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class LocationManager
{
public:
LocationManager();
virtual ~LocationManager();
static LocationManager* getInstance();
function<void(double,double)> OnLocationResult;
void InitLocation();
void OnResult(double latitude, double longitude);
bool GetCity(std::function<void(double,double)> OnLocationResult);
private:
static LocationManager *sLocationMgr;
};
#endif
LocationManager.cpp
#include "LocationManager.h"
LocationManager *LocationManager::sLocationMgr = nullptr;
LocationManager::LocationManager() : OnLocationResult(nullptr)
{
}
LocationManager::~LocationManager()
{
}
LocationManager* LocationManager::getInstance()
{
if(sLocationMgr == nullptr)
sLocationMgr = new LocationManager();
return sLocationMgr;
}
void LocationManager::OnResult(double latitude, double longitude)
{
if (OnLocationResult) OnLocationResult(latitude, longitude);
OnLocationResult = nullptr;
}
LocationManager.mm
#import <Foundation/Foundation.h>
#include "LocationManager.h"
#include "Location.h"
bool LocationManager::GetCity(std::function<void(double,double)> _OnLocationResult)
{
OnLocationResult = _OnLocationResult;
Location *req = [[[Location alloc] initializeLocationService] autorelease];
return true;
}