原文链接我在这,【iOS开发笔记】系统权限的获取和请求 - 简书
TenBluetoothManager.m
#import "TenBluetoothManager.h"
@interface TenBluetoothManager () <CBCentralManagerDelegate>
/**蓝牙管理类*/
@property (nonatomic, strong) CBCentralManager *cbCentralManager;
/**请求蓝牙权限回调*/
@property (nonatomic, copy) void (^bluetoothAuthBlock) (BOOL granted, CBPeripheralManagerAuthorizationStatus status);
@end
static TenBluetoothManager *_bluetoothManager;
@implementation TenBluetoothManager
#pragma mark - 构造
/**构造方法*/
+(instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (_bluetoothManager == nil) {
_bluetoothManager = [super allocWithZone:zone];
}
});
return _bluetoothManager;
}
/**单例方法*/
+(instancetype)shareManager {
return [[self alloc] init];
}
#pragma mark - public
-(void)ten_requestBluetoothRequest:(void (^)(BOOL, CBPeripheralManagerAuthorizationStatus))block {
self.bluetoothAuthBlock = block;
[self.cbCentralManager scanForPeripheralsWithServices:nil options:nil];
}
#pragma mark - CBCentralManagerDelegate
-(void)centralManagerDidUpdateState:(CBCentralManager *)central {
if (self.bluetoothAuthBlock) {
CBPeripheralManagerAuthorizationStatus authStatus = [CBPeripheralManager authorizationStatus];
self.bluetoothAuthBlock(authStatus == CBPeripheralManagerAuthorizationStatusAuthorized, authStatus);
}
}
#pragma mark - lazy
-(CBCentralManager *)cbCentralManager {
if (!_cbCentralManager) {
_cbCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
return _cbCentralManager;
}
@end
TenBluetoothManager.h
#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
@interface TenBluetoothManager : NSObject
/**单例方法*/
+(instancetype)shareManager;
/**
唤起请求蓝牙权限
@param block 结果回调
*/
-(void)ten_requestBluetoothRequest:(void (^) (BOOL granted, CBPeripheralManagerAuthorizationStatus status))block;
@end
调用
UNI_EXPORT_METHOD(@selector(getBluetoothPermissions:))
- (void)getBluetoothPermissions:(void(^)(BOOL authorized))completion {
[[TenBluetoothManager shareManager] ten_requestBluetoothRequest:^(BOOL granted, CBPeripheralManagerAuthorizationStatus status) {
}];
}
然后
info.plist添加如下
Privacy - Bluetooth Always Usage Description
Privacy - Bluetooth Peripheral Usage Description
实测结果