簡體   English   中英

如何使用Swift mbientlab藍牙掃描儀獲取藍牙設備MAC地址

[英]How to get Bluetooth device MAC address using Swift mbientlab bluetooth scanner

使用 MbientLab metawear MetaMotionRL 運動傳感器。 使用 Android 和 iOS 前端在 flutter 中構建移動應用程序。 通過 mbientlab API 訪問設備。使用 Java 訪問 Android,使用 Swift 訪問 iOS。

在 Java 端,我通過 flutter_blue 檢測設備。 這包括設備的 mac 地址。 當用戶從列表中選擇一個設備時,應用程序使用 mac 地址通過 mbient API 進行連接。

但是......我不知道如何在 Swift 端做同樣的事情。

還有... mbient API 有自己的設備掃描功能。 這很好,因為它只能找到環境設備; 不是其他藍牙設備。 所以,我正在使用它。 但是,我似乎無法在 API 中找到 mac 地址——不適用於尚未連接的設備。 我想在連接之前顯示附近所有設備的 mac 地址,這樣如果有多個設備,用戶可以根據打印在設備上的 mac 地址進行選擇。

所以,我正在尋找這些問題的答案......使用 Swift:

  1. 如何通過具有給定 mac 地址的 mbient API 連接到設備?
  2. 如何從 mbient 設備掃描儀獲取 mac 地址?

這是使用環境掃描儀的 Swift 代碼:

            MetaWearScanner.shared.startScan(allowDuplicates: false) { (device: MetaWear) in
                let id: String = device.peripheral.identifier.uuidString
                logger.trace("Found metawear device name:'\(device.name)' id:\(id)")
                self.foundDevicesById[id] = device
            }

設備有很多屬性——包括子對象。 但是我找不到mac地址。 好吧,這是一個 mac 地址屬性,但在連接設備之前不會加載它。 我錯過了什么嗎? 里面有mac地址嗎?

我沒有寫 Java 代碼。 我不明白。 這很復雜,但它確實有效。 它嵌入在 MainActivity.java 文件中。 以下是似乎相關的部分:

private BtleService.LocalBinder serviceBinder;

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
    ///< Typecast the binder to the service's LocalBinder class
    serviceBinder = (BtleService.LocalBinder) service;
}

private void retrieveBoard(String macAddress) {
    BluetoothManagBluetoothManagerer btManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    BluetoothDevice remoteDevice = btManager.getAdapter().getRemoteDevice(macAddress);
    _board = serviceBinder.getMetaWearBoard(remoteDevice);
}

如果我能在 Swift 中做類似的事情,那就太好了。 我不知道該怎么做。

這是不可能的。 您不能直接在 iOS 中訪問 BLE 設備的 MAC 地址。這是設計使然。 唯一可用的標識符是CBPeripheral.identifier 這是一個相當穩定的標識符,但它會不時更改。 每部手機都會為每個 BLE 設備分配一個不同的標識符。 這可以防止使用 BLE MAC 地址來跟蹤用戶。

也就是說,對於您描述的問題,您不需要標識符。 您可以將 CBPeripheral 對象放在一個列表中,當用戶選擇一個時,您可以連接到它。

如果您控制設備的固件,則可以通過特性或廣告提供 MAC 地址。 但在一般情況下,沒有辦法訪問這些信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM