투케이2K

352. (ios/swift5) OperationQueue 와 @escaping 사용해 CBCentralManager 블루투스 권한 상태 응답 값 콜백 (callback) 확인 본문

IOS

352. (ios/swift5) OperationQueue 와 @escaping 사용해 CBCentralManager 블루투스 권한 상태 응답 값 콜백 (callback) 확인

투케이2K 2023. 10. 21. 20:54

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 
 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [블루투스 권한 부여 상태 확인 실시]
    // -----------------------------------------------------------------------------------------
    var checkBluetoothFlag = false
    private let bluetoothOperationQueue = OperationQueue()
    var bluetoothCentralManager: CBCentralManager! // [블루투스 활성 상태 확인 및 실시간 블루투스 신호 스캔]
    
    func getBluetoothCheck(callback: @escaping (Bool) -> ()) {
        S_Log._D_(description: "블루투스 권한 부여 상태 확인 실시", data: nil)
        
        /*
        // -----------------------------------------
        // [getBluetoothCheck 메소드 설명]
        // -----------------------------------------
        1. 필요 info plist :
         
         Privacy - Bluetooth Always Usage Description
         Privacy - Bluetooth Peripheral Usage Description
        // -----------------------------------------
        2. 필요 import 및 delegate :
         
         import CoreBluetooth
         
         CBCentralManagerDelegate
        // -----------------------------------------
        3. 호출 방법 :
         
         C_Permission().getBluetoothCheck(){(result) in
             
             S_Log._D_(description: "블루투스 권한 사용 여부 확인", data: ["\(result)"])
             
         }
         
        // -----------------------------------------
        4. 참고 퍼미션 요청 알림 : 블루투스 권한을 허용하시겠습니까?
        // -----------------------------------------
        */
        
        
        // [초기 플래그 값 초기화]
        self.checkBluetoothFlag = false
        
        
        // [작업 큐에 추가]
        self.bluetoothOperationQueue.isSuspended = true
        let block = { callback(self.checkBluetoothFlag) }
        self.bluetoothOperationQueue.addOperation(block)
        
        
        DispatchQueue.main.async {
         
            // [블루투스 권한 확인 실시]
            self.bluetoothCentralManager = CBCentralManager(delegate: self, queue: nil)
            
        }
        
    }
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [블루투스 권한 부여 상태 응답 확인] : CBCentralManagerDelegate : Delegate
    // -----------------------------------------------------------------------------------------
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        
        switch central.state {
            
        case .unknown:
            S_Log._D_(description: "블루투스 권한 :: unknown :: 블루투스 상태 알수 없음", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
            
        case .resetting:
            S_Log._D_(description: "블루투스 권한 :: resetting :: 블루투스 서비스 리셋", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
            
        case .unsupported:
            S_Log._D_(description: "블루투스 권한 :: unsupported :: 기기가 블루투스를 지원하지 않습니다", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
            
        case .unauthorized:
            S_Log._D_(description: "블루투스 권한 :: unauthorized :: 블루투스 사용 권한 확인 필요", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
            
            // [앱 블루투스 권한 사용 설정창 이동]
            
        case .poweredOff:
            S_Log._D_(description: "블루투스 권한 :: poweredOff :: 블루투스 비활성 상태", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
            
            // [자동으로 시스템에서 비활성 상태 알림 및 팝업창 호출 실시]
            
        case .poweredOn:
            S_Log._D_(description: "블루투스 권한 :: poweredOn :: 블루투스 활성 상태", data: nil)
            self.checkBluetoothFlag = true
            self.bluetoothOperationQueue.isSuspended = false

        @unknown default:
            S_Log._D_(description: "블루투스 권한 :: default :: 상태", data: nil)
            self.checkBluetoothFlag = false
            self.bluetoothOperationQueue.isSuspended = false
        }
    }

[결과 출력]

 

================================================================
LOG :: CLASS PLACE :: C_Permission.swift :: centralManagerDidUpdateState(_:) :: 655
-------------------------------------------------
LOG :: NOW TIME :: 2023-10-21 20:48:04
-------------------------------------------------
LOG :: DESCRIPTION :: 블루투스 권한 :: poweredOn :: 블루투스 활성 상태
================================================================




================================================================
LOG :: CLASS PLACE :: A_Webview.swift :: viewDidLoad() :: 106
-------------------------------------------------
LOG :: NOW TIME :: 2023-10-21 20:48:04
-------------------------------------------------
LOG :: DESCRIPTION :: 블루투스 권한 사용 여부 확인
-------------------------------------------------
LOG :: true
================================================================

 

반응형
Comments