第一步:
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;
}