LoginSignup
11
10

More than 5 years have passed since last update.

BLE機器のデバイス名を変更してもiOSから見えるデバイス名が変わらない

Posted at

BLE機器を開発中に、テスト用アプリを作っていた時に引っかかったメモ。

BLE機器のデバイス名を変えたのに、変更前の名前になっている

確かに変更したはずと思い、自分のiOSアプリを疑う。
そこで、持っていたBLExplrでスキャンしてみたところ、見えていた情報が食い違っていることに気づく。

※以下キャプチャ画像の表示は一部マスクしてます
capt.png

iOS、デバイス情報のキャッシュ

あれこれ調べたところ、データの取り方によってはiOSが持っているキャッシュのデバイス名を取り出してしまう模様。
(BLEのUUIDとひも付けているっぽい?)

当初のコードでは、didDiscoverPeripheralに渡ってきたCBPeripheralのnameを参照していた。

- (void)   centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI
{
    // キャッシュからデバイス名を取り出す場合がある
    NSLog(@"Device name: %@", peripheral.name);

}

一度接続しなおす、などでキャッシュを書き換えることも可能だが、このままではBLE機器のデバッグが面倒なので違う手段にしたいところ。

対策

peripheralではなく、advertisementDataのkCBAdvDataLocalNameに入っている名前を取り出して使う。

こんな感じ。

- (void)   centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI
{
    // キャッシュじゃないところからデバイス名を取り出し
    NSLog(@"Device name: %@", advertisementData[@"kCBAdvDataLocalName"]);
}

思ったことなどなど

  • ありものの機器を使って開発するなら前者の方法でも別に問題なさそう
    • デバイス名ころころ変わらないだろうし。
  • peripheralからキャッシュ側の名前を取り出す場合の利点ってなんだろう?
11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10