12

iOS5.0で導入されたコアBluetoothフレームワークを試しています。StackOverflow自体の多くのスレッド(多くのスレッドの1つ)によると:

  1. コアBluetoothフレームワークは、Bluetooth Low Energy(4.0)ハードウェアをサポートする任意のハードウェアの通信に使用できます。
  2. Core Bluetoothテクノロジを使用している場合は、Made For iPhone / iPod(MFI)プログラムを忘れることができます。

私はiPhone5、iPhone 4S、Google Android Nexus 7を持っており、少なくとも最初の2つはBLEのハードウェアサポートを備えていると確信しています。

私の質問は

さて、私は私のiPhone 4S / iPhone 5で以下のコードを試しましたが、スキャンして近くに座っているiPhone5 /iPhone4Sを見つけることができませんでした。確認できます。両方のデバイスでBluetoothがオンになっています。デリゲートメソッドdidDiscoverPeripheralが呼び出されることはありません。理由は何でしょうか?私は何かが足りないのですか?

これは私のコードです(小さなテストプロジェクトに分解されました)。

ViewController.h

@interface ViewController:UIViewController<CBCentralManagerDelegate, CBPeripheralDelegate{
}
@property (strong, nonatomic) CBCentralManager *mCentralManager;
@end

ViewController.m

@implementation ViewController
@synthesize mCentralManager;

- (void)viewDidLoad{
    [super viewDidLoad];
    mCentralManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
    [self scanForPeripherals];
}

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
    NSLog(@"Received periferal :%@",peripheral);
}

- (int) scanForPeripherals {
    if (self.mCentralManager.state != CBCentralManagerStatePoweredOn)
    {
        NSLog(@"self.mCentralManagerState : %d",self.mCentralManager.state);
        return -1;
    }
    //Getting here alright.. bluetooth is powered on.
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
    //Documentation says passind nil as device UUID, scans and finds every peripherals
    [self.mCentralManager scanForPeripheralsWithServices:nil options:options];
    return 0;
}
@end
4

3 に答える 3

12

spamsinkがコメントしたように、1つのデバイスは周辺機器として機能し、もう1つは通信するために中央として機能する必要があります。

それを行うAppleの素晴らしいサンプルアプリがあります。また、 CoreBluetoothフレームワークの使用法の優れた説明と例については、 WWDC2012セッション703- CoreBluetooth101および705- AdvancedCoreBluetoothを確認してください。

また、デバイスを周辺機器モードにするには、iOS6.0以降に更新する必要があることに注意してください。

于 2012-12-13T12:51:18.750 に答える
3

さて、Bluetooth Low Energy(BLE)全般についての私の理解は不十分でした。受け入れられた回答が指摘したように、通信を行うには、一方のデバイスが中央として機能し、もう一方のデバイスが周辺機器として機能する必要があります。

iOSからiOSおよびiOSからMacOSBLE通信の良いサンプルソースコードはここにあります。

考慮すべきいくつかの重要なポイント

  1. iOS5.0では->iPhoneはCentralとしてのみ機能するため、2つのiOSデバイス間の通信はできません。
  2. iOS6.0では->iPhoneは周辺機器としても機能します。したがって、通信を行うには、少なくとも1つのデバイスがiOS 6.0(およびおそらくそれ以降)で実行されている必要があります。
  3. BLEハードウェアが追加された最初のiPhoneデバイスはiPhone4Sです。そのため、iPhone4でiOS5を実行できたとしても、BLE通信はできません。

さていくつかの情報..

于 2012-12-14T08:21:11.223 に答える
1

didUpdateStateデリゲートでscanForPeripherals関数を呼び出すと、デリゲート関数が戻ることができないため、機能します。

于 2014-12-19T07:15:54.250 に答える