BBASMLocationAdapterProtocol.h 3.42 KB
//
//  BBASMLocationAdapterProtocol.h
//  BBAMNP
//
//  Created by baidu on 2018/9/6.
//  Copyright © 2018年 baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "BBASMAdapterBaseImplement.h"

@protocol BBASMLocationDataProtocol;

typedef NSString * BBASMLocationCallbackIdentifier;

typedef void(^BBASMLocationCallback)(BOOL authorized, NSError *error, id<BBASMLocationDataProtocol>);

typedef NS_ENUM(NSUInteger, BBASMLocationStatus) {
    BBASMLocationStatusSuccess = 0,
    BBASMLocationStatusServicesNotDetermined,
    BBASMLocationStatusServicesDenied,
    BBASMLocationStatusServicesRestricted,
    BBASMLocationStatusServicesDisabled,
    BBASMLocationStatusError,
};

typedef NS_ENUM(NSUInteger, BBASMLocationCoordinateType) {
    BBASMLocationCoordinateTypeWGS84 = 0,
    BBASMLocationCoordinateTypeGCJ02,
    BBASMLocationCoordinateTypeBMK09MC,
    BBASMLocationCoordinateTypeBMK09LL,
};

@protocol BBASMLocationAdapterProtocol <NSObject>

/**
 * 获取定位信息-异步
 * @discussion 根据指定坐标系类型异步获取定位信息。宿主app在实现该方法时,需要添加系统定位权限相关的请求和检查,swan-native不会触发和接管权限请求。
 * @param type          坐标系类型
 * @param completion    定位结果的callback
 */
+ (void)asyncGetLocationWithType:(BBASMLocationCoordinateType)type
                      completion:(void (^)(BBASMLocationStatus status, id<BBASMLocationDataProtocol> locationData))completion;

/**
 * 获取位置信息-同步
 * @discussion 根据指定坐标系类型同步获取定位信息。。宿主app在实现该方法时,需要添加系统定位权限相关的请求和检查,swan-native不会触发和接管权限请求。
 * @param type          坐标系类型
 * @return 定位结果, 可以为nil
 */
+ (id<BBASMLocationDataProtocol>)syncGetLocationWithType:(BBASMLocationCoordinateType)type;

/**
 开启定位,并不断接收定位地理位置信息
 @param locationCallback  不断接收定位信息的回调
 @return BBALocationCallBackIdentifier  位置接收callback对应的唯一标示,stop、pause和resume方法都需要该标示
 */
+ (BBASMLocationCallbackIdentifier)startLocationWithCallback:(BBASMLocationCallback)locationCallback;

/**
 停止定位
 @param identifier 位置接收callback对应的唯一标示
 */
+ (void)stopLocationWithIdentifier:(BBASMLocationCallbackIdentifier)identifier;

/**
 暂停定位
 @param identifier 位置接收callback对应的唯一标示
 */
+ (void)pauseLocationWithIdentifier:(BBASMLocationCallbackIdentifier)identifier;

/**
 恢复定位
 @param identifier 位置接收callback对应的唯一标示
 */
+ (void)resumeLocationWithIdentifier:(BBASMLocationCallbackIdentifier)identifier;

@end

@protocol BBASMLocationDataProtocol <NSObject>

///位置基本信息
@property (nonatomic, strong) CLLocation *location;

///国家名字属性
@property(nonatomic, copy) NSString *country;

///国家编码属性
@property(nonatomic, copy) NSString *countryCode;

///省份名字属性
@property(nonatomic, copy) NSString *province;

///城市名字属性
@property(nonatomic, copy) NSString *city;

///城市编码属性
@property(nonatomic, copy) NSString *cityCode;

///区名字属性
@property(nonatomic, copy) NSString *district;

///街道名字属性
@property(nonatomic, copy) NSString *street;

///街道号码属性
@property(nonatomic, copy) NSString *streetNumber;

@end