3

仕事で、私は任務を与えられました:)何かをするためにデバイスに接続するAndroidライブラリを移植することです(NDAのため、これ以上は言えません)。Android コードではgetRemoteDevice(macAddress)createRfcommSocketToServiceRecord基本的にペアリング メカニズム全体をスキップしてバイトを「そのまま」送信するために と を使用します。これはiOSで可能ですか?このレベルの「汚れ」はありますか:-)

4

2 に答える 2

4

Bluetooth 2.1 なら、かなり簡単です。ソケットを作成することもできます。例えば:

EASession *session = [[EASession alloc] initWithAccessory:accessory
                                   forProtocol:PROTOCOL_STRING];
if (session) {

    [[session inputStream] setDelegate:self];
    [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [[session inputStream] open];

    [[session outputStream] setDelegate:self];
    [[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [[session outputStream] open];
}

ただし、@ Paulw11 が述べたように、MFI プログラムを通過する必要があります。

Bluetooth LE は大きく異なります。ソケットはありません。サービスと特性でのみ操作できます。

ちなみに、MACアドレスだけでBLEデバイスに接続することはできません。最初に、サービス UUID を使用してこのデバイスをスキャンする必要があります。

[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kScanServiceUUID]] options:options];

その後、CBPeripheral に接続します。

更新: そして、Bluetooth 2.1 で「基本的にペアリング メカニズム全体をスキップする」ことについてはどうでしょうか。ユーザーなしでペアリングを行うことはできないと思います。ユーザーにダイアログを表示し、ペアリングしたいデバイスを選択できる方法が1つありますが、それが私が見つけたすべてです:

- (void)showBluetoothAccessoryPickerWithNameFilter:(NSPredicate *)predicate completion:(EABluetoothAccessoryPickerCompletion)completion

ユーザーがデバイスを Bluetooth アクセサリとペアリングできるようにするアラートを表示します。

Bluetooth 2.1 とは異なり、Bluetooth LE ではペアリングはまったく必要ありません。

于 2014-08-16T20:20:41.100 に答える