iOS 封裝一個百度地圖的定位類 可以持續(xù)后臺定位

此處有BUG

適合新手,大牛路過請無視。

開始了

如果你是新手,對定位類不是很懂,或者公司要求接百度地圖API。
哎呀!還是不做廢話了。首先我們集成通過CocoaPods集成百度地圖如果對CocoaPods還不了解推薦看一遍就會的CocoaPods的安裝和使用教程或者你想直接看iOS百度地圖配置

進行中

那么我開始簡單的介紹一下吧
首先你要簡單配置一下
如果要使用在前臺定位 添加Privacy - Location When In Use Usage Description
如果要在后臺使用 添加Privacy - Location Always Usage Description
建議兩個都添加在plist文件里面


plist文件配置.png
#import <Foundation/Foundation.h>

@import CoreLocation;
@interface YZLocationManager : NSObject

//是否開啟后臺定位 默認(rèn)為NO
@property (nonatomic, assign) BOOL isBackGroundLocation;

//isBackGroudLocation為YES時,設(shè)置LocationInterval默認(rèn)為1分鐘
@property (nonatomic, assign) NSTimeInterval locationInterval;

//后臺定位開啟時 返回定位經(jīng)緯度
@property (nonatomic, copy) void (^YZBackGroundLocationHander) (CLLocationCoordinate2D coordinate);

//后臺定位開啟時 返回反編碼地理位置
@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;
//通過單例創(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文件 定義了幾個block
如果你創(chuàng)建是一個單例類 那么要注意在多個頁面使用到時這些屬性已最后一次賦值為準(zhǔn),如果同一個頁面多處要求同時定位,本類或許將不適用。
如果你要使用持續(xù)后臺定位,我們還要進一步配置

持續(xù)后臺定位配置.png

在配置完之后使用的時候要注意,關(guān)于一些后臺定位的配置都需要

isBackGroundLocation為YES的時候才能設(shè)置

iOS8進入后臺的時候需要配置requestAlwaysAuthorization否則在頂部將會顯示一個藍(lán)條以上都配置好了就可以使用了 由于使用的百度地圖,百度地圖定位間隔的API沒有公開經(jīng)過測試大概是30秒,這30秒正常可以滿足大多數(shù)需求 如果這里有想要
系統(tǒng)自帶的持續(xù)定位的那么你可以看看這個

注意

如果你想審核的時候不被拒,在App介紹里面的加上一句話讓用戶看到(例句):

使用“打卡”應(yīng)用點擊上班簽到后將開啟軌跡定位功能,會持續(xù)使用GPS定位服務(wù),切換到后臺仍會保存GPS連接,相比其他操作會消耗更多的電量。
GPS在后臺持續(xù)運行會影響電池續(xù)航時間。

簡單的例子來一個,其它用法你們可以自己看下源碼的注釋

    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é)束了

多的不說了,例子什么的都在源碼里面了,哪里寫的有問題的地方可以提出來以便樓主進行修改。覺得樓主寫的好的請給顆star。
源碼地址:GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容