我是用的高德地圖做的定位
現(xiàn)在大部分手機(jī)都是iOS 11 系統(tǒng)以后的,所以不考慮iOS 11以前的系統(tǒng).
iOS 11 以后
NSLocationAlwaysAndWhenInUseUsageDescription 表示始終允許
NSLocationWhenInUseUsageDescription 表示使用期
但是使用NSLocationAlwaysAndWhenInUseUsageDescription之后系統(tǒng)的定位授權(quán)彈框,并不會(huì)出現(xiàn).
高德地圖對(duì)此作出了處理.
/**
* @brief 當(dāng)plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription勿决,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined盖腿,會(huì)調(diào)用代理的此方法镐牺。
此方法實(shí)現(xiàn)調(diào)用申請(qǐng)后臺(tái)權(quán)限API即可:[locationManager requestAlwaysAuthorization](必須調(diào)用,不然無法正常獲取定位權(quán)限)
* @param manager 定位 AMapLocationManager 類烹骨。
* @param locationManager 需要申請(qǐng)后臺(tái)定位權(quán)限的locationManager告希。
* @since 2.6.2
*/
- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager;
所以只需要在代碼中加入如下代碼,就可以正常彈框了
- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager
{
[locationManager requestAlwaysAuthorization];
}
當(dāng)然,此方法在AMapLocationManagerDelegate當(dāng)中,需要設(shè)置delegate