Получить ма c адрес маршрутизатора Wi-Fi, к которому подключен мой телефон, используя флаттер - PullRequest
0 голосов
/ 14 февраля 2020

Я пытался получить ма c адрес моего маршрутизатора Wi-Fi, к которому подключено мое устройство. Я использую Flutter.

Я встречал несколько плагинов, таких как get_ip , wifi_info_plugin , а также flutter_ip . Но либо показывает неизвестное, либо не поддерживает android, не поддерживает ios, либо просто ничего не показывает.

Я пытаюсь сделать так, чтобы запускалось только мое приложение когда подключен к одному Speci c Wi-Fi маршрутизатор . Так что в основном некоторые функции приложения будут отключены при подключении к другому маршрутизатору Wi-Fi, отличному от моего.

Пожалуйста, предложите любой другой плагин или любой обходной путь.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Вы можете использовать SystemConfiguration.CaptiveNetwork framework для копирования текущей сетевой информации из поддерживаемых интерфейсов. Обратите внимание, что вам необходимо разрешить доступ к местоположению вашего устройства и включить настройку Hotspot и доступ к информации Wi-Fi в возможностях вашего приложения:

import UIKit
import CoreLocation
import SystemConfiguration.CaptiveNetwork
class ViewController: UIViewController, CLLocationManagerDelegate {
    let locationManager = CLLocationManager()
    var bssid = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        requestLocationAccess()
    }
    func requestLocationAccess() {
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            switch CLLocationManager.authorizationStatus() {
            case .notDetermined:
                locationManager.requestWhenInUseAuthorization()
            case .restricted, .denied:
                let alert = UIAlertController(title: "Allow Location Access",
                                              message: "Please turn on Location Services",
                                              preferredStyle: .alert)
                alert.addAction(.init(title: "Settings",
                                      style: .default) { _ in         
                    let url = URL(string: UIApplication.openSettingsURLString)!
                    if UIApplication.shared.canOpenURL(url) {
                        UIApplication.shared.open(url) { success in
                            print("Settings opened: \(success)")
                        }
                    }
                })
                alert.addAction(.init(title: "Ok", style: .default))
                DispatchQueue.main.async {
                    self.present(alert, animated: true)
                }
            case .authorizedWhenInUse, .authorizedAlways: break
            @unknown default: break
            }
            locationManager.startUpdatingLocation()
        }
    }
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if bssid.isEmpty {
            fetchBSSIDInfo()
        }
    }
    func fetchBSSIDInfo()  {
        if let interfaces = CNCopySupportedInterfaces() as? [CFString]  {
            for interface in interfaces {
                if let currentNetworkInfo = CNCopyCurrentNetworkInfo(interface) as? [CFString: Any]  {
                    bssid = currentNetworkInfo[kCNNetworkInfoKeyBSSID] as? String ?? ""
                    print(bssid)
                    locationManager.stopUpdatingLocation()
                    break
                }
            }
        }
    }
}
0 голосов
/ 14 февраля 2020

Похоже, wifi_info_plugin - ваш лучший выбор. Следуйте документации и попытайтесь получить AP MA C примерно так:

wifiObject = await  WifiInfoPlugin.wifiDetails;
AP_MAC = wifiObject.bssId.toString();

Убедитесь, что AP_MAC != "missing", и заверните в попытку / поймать, если она выдаст PlatformException. Это может не работать для устройств iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...