[英]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:
這是使用環境掃描儀的 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.