2017-11-30 4 views
0

기기의 Wi-Fi 강도를 얻거나 계산하는 방법을 찾고 계십니까? 상태 표시 줄을 긁어의 예를 본 적이 있지만 아이폰 OS (11)에 동작하지 않습니다 :iOS 11의 Swift에서 Wi-Fi 강도를 계산하거나 얻는 방법

func getSignalStrength() -> Int { 
    let application = UIApplication.shared 
    let statusBarView = application.value(forKey: "statusBar") as! UIView 
    let foregroundView = statusBarView.value(forKey: "foregroundView") as! UIView 
    let foregroundViewSubviews = foregroundView.subviews 

    var dataNetworkItemView:UIView! 

    for subview in foregroundViewSubviews { 
     if subview.isKind(of: NSClassFromString("UIStatusBarSignalStrengthItemView")!) { 
      dataNetworkItemView = subview 
      print("NONE") 
      break 
     } else { 
      print("NONE") 

      return 0 //NO SERVICE 
     } 
    } 

    return dataNetworkItemView.value(forKey: "signalStrengthBars") as! Int 
} 

모든 영리한 아이디어를?

하지 WiFi 네트워크에 대한 사과

답변

1

당신이 코드는 모바일 네트워크 (등 2G/3G/4G)을위한 승인을 할 필요가 없습니다.

에 Swift4을 아래의 코드를 시도, 내 iOS11에서 작동 :

private func wifiStrength() -> Int? { 
    let app = UIApplication.shared 
    var rssi: Int? 
    guard let statusBar = app.value(forKey: "statusBar") as? UIView, let foregroundView = statusBar.value(forKey: "foregroundView") as? UIView else { 
     return rssi 
    } 
    for view in foregroundView.subviews { 
     if let statusBarDataNetworkItemView = NSClassFromString("UIStatusBarDataNetworkItemView"), view .isKind(of: statusBarDataNetworkItemView) { 
      if let val = view.value(forKey: "wifiStrengthRaw") as? Int { 
       //print("rssi: \(val)") 

       rssi = val 
       break 
      } 
     } 
    } 
    return rssi 
} 

방법, iPhoneX에 와이파이 강도를 얻을 다른 게시물에 내 대답을 확인 :이 코드는 '아무튼 Using Private API To read WiFi RSSI Value

+0

iPhone X 용 iPhone X –

+0

에서 작업 : https://stackoverflow.com/questions/44167577/using-private-api-to-read-wifi-rssi-value/48083845#48083845 – User9527

관련 문제