swift获取app网络和本地网络权限

请求蓝牙权限:

 //蓝牙
            if #available(iOS 13.1, *) {
                let autostate = CBManager.authorization
                if(autostate == .notDetermined){
                    print("")
                    self.manager = CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPowerAlertKey:false])
//                    manager.state
                }
            } else {
                let manager = CBCentralManager(delegate: nil, queue: DispatchQueue.main)
                let state:CBManagerAuthorization = manager.authorization
                switch(state){
                case .notDetermined:
//                    KdBLEService.shared().requestBleToothPermission()
                    break
                case .restricted:

                    break
                case .denied:

                    break
                case .allowedAlways:

                    break
                @unknown default:
                    break
                }
            }

无线网权限:

CTCellularData().cellularDataRestrictionDidUpdateNotifier = {state in
                switch state {
                case .restrictedStateUnknown:
                    //未知
                    item.pstate = .unknown
                    let reachAbility:Reachability = Reachability.forInternetConnection()
                    let wifiState:NetworkStatus = reachAbility.currentReachabilityStatus()
                    switch(wifiState){
                    case NotReachable:
                        item.serviceState = false
                        break
                    default:
                        break
                    }
                case .restricted:
                    //受限制
                    if(item.pstate != .stricted){
                        item.pstate = .stricted
                        self.stateAsyncUpdate?()
                    }
                    item.pstate = .stricted
                case .notRestricted:
                //Reachability库文中尾部放入
                    //不受限制
                    print("第一次进来也会显示这个状态,第一次进来需要")
                    let reachAbility:Reachability = Reachability.forInternetConnection()
                    let wifiState:NetworkStatus = reachAbility.currentReachabilityStatus()
                    switch(wifiState){
                    case NotReachable:
                        item.serviceState = false
                        break
                    default:
                        break
                    }
                    if(item.pstate != .on){
                        item.pstate = .on
                    }
                    self.stateAsyncUpdate?()
                    item.pstate = .on
                @unknown default:
                    print("")
                }

本地网络权限:

class LocalNetworkPermissionTester {
    var connection: NWConnection
    var success = false
    var semaphore: DispatchSemaphore
    init(semaphore: DispatchSemaphore) {
        self.semaphore = semaphore
        let dispatchQueue = DispatchQueue(label: "LocalNetworkPermissionTester")
        self.connection = NWConnection(host: "127.255.255.255", port: 9, using: .udp)
        self.connection.stateUpdateHandler = { state in
            switch state {
            case .ready:
                self.success = true
                semaphore.signal()
            case .waiting(_):
//                if #available(iOS 14.2, *) {
//                    print("reason: \(self.connection.currentPath?.unsatisfiedReason)")
//                    if case .localNetworkDenied? = self.connection.currentPath?.unsatisfiedReason {
//                        self.success = false
//                        semaphore.signal()
//                    }
//                } else {
                    print("status: \(self.connection.currentPath?.status)")
                    self.success = false
                    semaphore.signal()
//                }
            default:
                break
            }
        }
        connection.start(queue: dispatchQueue) // this will trigger the prompt if necessary
    }
}

 public func getLocalNetPermission(item:KdPermissionItem){
//        Task.init {
//            do{
//                let isOK = try await  KdLocalNetworkManager().requestAuthorization()
//                print("ok")
//                if(!isOK){
//                    item.pstate = .stricted
//                }else{
//                    item.pstate = .unknown
//                }
//                self.stateAsyncUpdate?()
//            }catch{
//                print("exception")
//
//                item.pstate = .unknown
//                self.stateAsyncUpdate?()
//            }
//        }
//        item.pstate = .on
        
        let semaphore = DispatchSemaphore(value: 0)
        let tester = LocalNetworkPermissionTester(semaphore: semaphore)
        semaphore.wait()
        print("success: \(tester.success)")
        if(tester.success){
            if(item.pstate != .on){
                item.pstate = .on
                self.stateAsyncUpdate?()
            }
            item.pstate = .on
        }else{
            if(item.pstate != .stricted){
                item.pstate = .stricted
                self.stateAsyncUpdate?()
            }
            item.pstate = .stricted
        }
        item.isNeedGet = true
        
               
        
    }

相关推荐

  1. swift获取app网络本地网络权限

    2024-07-10 23:18:06       11 阅读
  2. Swift网络编程

    2024-07-10 23:18:06       22 阅读
  3. Android API 30及更高版本网络权限设置

    2024-07-10 23:18:06       25 阅读
  4. AndroidStudio设置允许APP获取定位权限

    2024-07-10 23:18:06       13 阅读
  5. [网络安全] NTFS权限

    2024-07-10 23:18:06       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 23:18:06       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 23:18:06       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 23:18:06       4 阅读
  4. Python语言-面向对象

    2024-07-10 23:18:06       8 阅读

热门阅读

  1. C语言获取当前时间

    2024-07-10 23:18:06       12 阅读
  2. Unity3D项目中如何正确使用Lua详解

    2024-07-10 23:18:06       10 阅读
  3. WPF更新UI线程实现进度条功能

    2024-07-10 23:18:06       12 阅读
  4. mysql 导出导入 数据库

    2024-07-10 23:18:06       10 阅读
  5. python-django-LlamaIndex 精简版

    2024-07-10 23:18:06       7 阅读
  6. 深入Django(五)

    2024-07-10 23:18:06       14 阅读
  7. Django之登录权限系统

    2024-07-10 23:18:06       9 阅读
  8. LeetCode 35, 242, 994

    2024-07-10 23:18:06       10 阅读
  9. tcp 中的poll机制介绍

    2024-07-10 23:18:06       10 阅读