此處有BUG
適合新手笙各,大牛路過(guò)請(qǐng)無(wú)視。
開始了
如果你是新手邦鲫,對(duì)定位類不是很懂灸叼,或者公司要求接百度地圖API。
哎呀庆捺!還是不做廢話了古今。首先我們集成通過(guò)CocoaPods集成百度地圖如果對(duì)CocoaPods還不了解推薦看一遍就會(huì)的CocoaPods的安裝和使用教程或者你想直接看iOS百度地圖配置
進(jìn)行中
那么我開始簡(jiǎn)單的介紹一下吧
首先你要簡(jiǎn)單配置一下
如果要使用在前臺(tái)定位 添加Privacy - Location When In Use Usage Description
如果要在后臺(tái)使用 添加Privacy - Location Always Usage Description
建議兩個(gè)都添加在plist文件里面
#import <Foundation/Foundation.h>
@import CoreLocation;
@interface YZLocationManager : NSObject
//是否開啟后臺(tái)定位 默認(rèn)為NO
@property (nonatomic, assign) BOOL isBackGroundLocation;
//isBackGroudLocation為YES時(shí),設(shè)置LocationInterval默認(rèn)為1分鐘
@property (nonatomic, assign) NSTimeInterval locationInterval;
//后臺(tái)定位開啟時(shí) 返回定位經(jīng)緯度
@property (nonatomic, copy) void (^YZBackGroundLocationHander) (CLLocationCoordinate2D coordinate);
//后臺(tái)定位開啟時(shí) 返回反編碼地理位置
@property (nonatomic, copy) void (^YZBackGroundGeocderAddressHander) (NSString *address);
//獲取經(jīng)緯度
@property (nonatomic, copy) void (^YZLocationCoordinate) (CLLocationCoordinate2D coordinate, NSError *error);
//獲取反編碼地理位置
@property (nonatomic, copy) void (^YZLocationGeocderAddress) (NSString *address, NSUInteger error);
//最近一次定位的經(jīng)緯度
@property (nonatomic, readonly) CLLocationCoordinate2D lastCoordinate;
//最近一次反編碼地理位置
@property (nonatomic, copy, readonly) NSString *lastGeocoderAddress;
//通過(guò)單例創(chuàng)建
+ (YZLocationManager *)sharedLocationManager;
//獲取經(jīng)緯度和反編碼地理位置
- (void)receiveCoorinate:(void (^)(CLLocationCoordinate2D coordinate, NSError *error))coordinateHander geocderAddress:(void (^)(NSString *address, NSUInteger error))addressHander;
//傳入經(jīng)緯度獲取反編碼地理位置
- (void)geoCodeSearchWithCoorinate:(CLLocationCoordinate2D)coordinate address:(void (^)(NSString *address, NSUInteger error))address;
//開始定位
- (void)startLocationService;
//停止定位
- (void)stopLocationService;
@end
這是.h文件 定義了幾個(gè)block
如果你創(chuàng)建是一個(gè)單例類 那么要注意在多個(gè)頁(yè)面使用到時(shí)這些屬性已最后一次賦值為準(zhǔn)滔以,如果同一個(gè)頁(yè)面多處要求同時(shí)定位捉腥,本類或許將不適用。
如果你要使用持續(xù)后臺(tái)定位醉者,我們還要進(jìn)一步配置
在配置完之后使用的時(shí)候要注意但狭,關(guān)于一些后臺(tái)定位的配置都需要
isBackGroundLocation為YES的時(shí)候才能設(shè)置
iOS8進(jìn)入后臺(tái)的時(shí)候需要配置requestAlwaysAuthorization否則在頂部將會(huì)顯示一個(gè)藍(lán)條以上都配置好了就可以使用了 由于使用的百度地圖,百度地圖定位間隔的API沒有公開經(jīng)過(guò)測(cè)試大概是30秒撬即,這30秒正沉⒋牛可以滿足大多數(shù)需求 如果這里有想要
系統(tǒng)自帶的持續(xù)定位的那么你可以看看這個(gè)
注意
如果你想審核的時(shí)候不被拒,在App介紹里面的加上一句話讓用戶看到(例句):
使用“打卡”應(yīng)用點(diǎn)擊上班簽到后將開啟軌跡定位功能剥槐,會(huì)持續(xù)使用GPS定位服務(wù)唱歧,切換到后臺(tái)仍會(huì)保存GPS連接,相比其他操作會(huì)消耗更多的電量粒竖。
GPS在后臺(tái)持續(xù)運(yùn)行會(huì)影響電池續(xù)航時(shí)間颅崩。
簡(jiǎn)單的例子來(lái)一個(gè),其它用法你們可以自己看下源碼的注釋
YZLocationManager *manager = [YZLocationManager sharedLocationManager];
manager.isBackGroundLocation = YES;
manager.locationInterval = 10;
// @weakify(manager)
[manager setYZBackGroundLocationHander:^(CLLocationCoordinate2D coordinate) {
_plc(coordinate);
YZLMLOG(@">>>>>>>>>>>>>%f,,%f",coordinate.latitude,coordinate.longitude);
// @strongify(manager) //注意別造成循環(huán)引用
// [manager geoCodeSearchWithCoorinate:coordinate address:^(NSString *address, NSUInteger error) {
// YZLMLOG(@">>>>>>>>>>address:%@",address);
// }];
NSDictionary *dic = @{
@"time":self.dateString,
@"coordinate":[NSString stringWithFormat:@"%f,%f",coordinate.latitude,coordinate.longitude]
};
[self.dataSouce addObject:dic];
[self.tableView reloadData];
}];
[manager setYZBackGroundGeocderAddressHander:^(NSString *address) {
YZLMLOG(@">>>>>>>>>>address:%@",address);
}];
[manager startLocationService];
結(jié)束了
多的不說(shuō)了蕊苗,例子什么的都在源碼里面了沿后,哪里寫的有問(wèn)題的地方可以提出來(lái)以便樓主進(jìn)行修改。覺得樓主寫的好的請(qǐng)給顆star朽砰。
源碼地址:GitHub