
讀懂人心.jpg
目前我正在為一款關(guān)于車險的APP上線工作而忙碌著,里面有一個需要打開地圖導(dǎo)航及定位功能的模塊。所以今天我們來談一談有關(guān)于這方面集成的幾個要點。。。
第一步,很常規(guī)就不多說了,大家可以打開官網(wǎng)將這個SDK通過文件下載或者pod來獲取相關(guān)SDK文件。
第二步,集成定位功能的時候按照需求來下載是單次定位還是常定位的SDK
現(xiàn)在就給大家演示一下相關(guān)操作吧:
單次定位:
[[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"RumL0R5SashrOBmzuI41BkL0FASiyiWk" authDelegate:self];
//初始化實例
_locationManager = [[BMKLocationManager alloc] init];
//設(shè)置delegate
_locationManager.delegate = self;
//設(shè)置返回位置的坐標(biāo)系類型
_locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
//設(shè)置距離過濾參數(shù)
_locationManager.distanceFilter = kCLDistanceFilterNone;
//設(shè)置預(yù)期精度參數(shù)
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//設(shè)置應(yīng)用位置類型
_locationManager.activityType = CLActivityTypeAutomotiveNavigation;
//設(shè)置是否自動停止位置更新
_locationManager.pausesLocationUpdatesAutomatically = NO;
//設(shè)置是否允許后臺定位
//_locationManager.allowsBackgroundLocationUpdates = YES;
//設(shè)置位置獲取超時時間
_locationManager.locationTimeout = 10;
//設(shè)置獲取地址信息超時時間
_locationManager.reGeocodeTimeout = 10;
//這個方法是獲取對應(yīng)的location的值
[_locationManager requestLocationWithReGeocode:YES withNetworkState:YES completionBlock:^(BMKLocation * _Nullable location, BMKLocationNetworkState state, NSError * _Nullable error) {
}];
常定位:
_locationManager = [[BMKLocationManager alloc] init];
//設(shè)置delegate
_locationManager.delegate = self;
//設(shè)置返回位置的坐標(biāo)系類型
_locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
//設(shè)置距離過濾參數(shù)
_locationManager.distanceFilter = kCLDistanceFilterNone;
//設(shè)置預(yù)期精度參數(shù)
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//設(shè)置應(yīng)用位置類型
_locationManager.activityType = CLActivityTypeAutomotiveNavigation;
//設(shè)置是否自動停止位置更新
_locationManager.pausesLocationUpdatesAutomatically = YES;
//設(shè)置是否允許后臺定位
_locationManager.allowsBackgroundLocationUpdates = NO;
//設(shè)置位置獲取超時時間
_locationManager.locationTimeout = 10;
//設(shè)置獲取地址信息超時時間
_locationManager.reGeocodeTimeout = 10;
然后常定位需要實現(xiàn)對應(yīng)的代理方法:
- (void)BMKLocationManager:(BMKLocationManager *)manager didUpdateLocation:(BMKLocation *)location orError:(NSError *)error {
};
如果需求上面還需要獲取對應(yīng)的具體地址,比如說城市等。這時候還得要一個反編譯的操作:
[geocoder reverseGeocodeLocation:location.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (! error) {
if ([placemarks count] > 0) {
CLPlacemark *placemark = [placemarks firstObject];
// 獲取城市
NSString *city = placemark.locality;
if (!city) {
// 6
city = placemark.administrativeArea;
}
self.city = city;
// [self requestForMyMapAddress];
} else if ([placemarks count] == 0) {
// [TSMessage showNotificationWithTitle:@"GPS故障"
// subtitle:@"定位城市失敗"
// type:TSMessageNotificationTypeError];
}
} else {
// [TSMessage showNotificationWithTitle:@"網(wǎng)絡(luò)錯誤"
// subtitle:@"請檢查您的網(wǎng)絡(luò)"
// type:TSMessageNotificationTypeError];
}
}];
第三步,將所有的權(quán)限問題檢查一遍,沒有寫的添加到plist文件上面。(當(dāng)然常定位對應(yīng)的權(quán)限要多幾個,注意添加)