問題タブ [cbperipheralmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - CBPeripheralManager で、ペアリングしようとしているときにユーザーがキャンセル ボタンを押したかどうかを知る方法
CBPeripheralManager で iPhone とデバイス間の BLE 接続を行っています。
Central が周辺機器とペアリングしようとすると、Bluetooth ペアリングの alertController がポップアップし、ユーザーはどれを使用するかを選択できます。それらのほとんどは、接続ボタンを押します。
しかし、ユーザーがいつキャンセル ボタンを押したかを知る方法はありますか?
デリゲート API があればよいのですが、見つかりませんでした。
ios - CBPeripheralManager は、あるアプリではサポートされておらず、別のアプリではパワーオンされています
私は2つのアプリを持っているという問題に直面しましたCBPeripheralManager.1つはブルートゥースの状態をチェックすることをテストしたデモアプリで、2番目はこの動作するソリューションを持つアプリです.
このソリューションによると、デモアプリでのチェックを正常に実装しましたが、問題は2番目のアプリで始まります。CBPeripheralManager常に状態を返しますUnsupported。iPhone 6sでテストしています。私は今、私が何を間違えたのかわかりました。
編集済み
ViewController
ビーコンマネージャー
ios - ビュー間で CoreBluetooth 接続を維持する方法
Apples CoreBluetooth TemperatureSensor の例 ( https://developer.apple.com/library/ios/samplecode/TemperatureSensor/Introduction/Intro.html )に基づいてアプリに CoreBluetooth を実装しました。デバイスの検索、結果のテーブルビューへの入力、デバイスの選択と接続がうまく機能します。私の問題は、アプリ全体のビュー間の接続を維持したいということです。
私の現在のセットアップでは、Bluetooth セットアップ ビューに移動するボタンのあるビューがあります。Bluetooth ビューはモーダルに表示され、ここで BT デバイスを検索し、そのうちの 1 つに接続します。ビューを閉じるとすぐに、おそらく接続が保持されていないために接続が失われますか?
したがって、私はシングルトン実装を使用してオブジェクトを保持し (Apple の例のように)、接続を維持することを望んでいますが、うまくいきません。ただし、シングルトンからオブジェクトを取得し、connectPeripheral を呼び出して再接続することはできますが、ユーザーの観点からは、ユーザーが以前に接続した後にパスワードを再度入力する必要があることはそれほど素晴らしいことではありません。
では、BT デバイスが接続されている設定ビューがある場合など、ビュー間で Bluetooth 接続を維持し、残りのアプリで同じ接続を使用するにはどうすればよいですか?
更新: 含まれるコード
また、言及する価値があるのは、私のクラス (共有インスタンスを含む) が Apple の例に基づいているだけでなく、HMSoft の SerialGATT 実装 (Apple の実装に基づいていると思われます) にも基づいていることです。これは、gitで見つけた1つの場所へのリンクですhttps://github.com/ezefranca/kit-iot-wearable-ios/blob/master/kit-iot-wearable-ios/SerialGATT.h
したがって、私のシングルトンでは、SerialGATT.h に以下を追加しました (id も試しましたが、違いはありませんでした)。
そしてSerialGATT.mには私が持っています
Bluetooth ビューコントローラーで SerialGATT とシングルトンを使用する場合、SerialGATT のデリゲート メソッドを実装し、viewDidLoad に次のように記述します。
注意!単に "delegate" という名前になる前に、元の SerialGATT の例から discoveryDelegate の名前を変更しました。discoveryDelegate は Apples の例で使用されている名前であり、重要ではありません。
ここから、モーダル Bluetooth 設定ビューですべてが正常に機能します。上記のように、デバイスを検索して接続できます。代議員が呼ばれています。すべてが順調でダンディです。ただし、モーダルを閉じると、デバイスは切断されますが、シングルトンにアクセスしたり、再接続したりすると、他のビューでオブジェクトを見つけることができます。しかし、もう一度、再接続してパスワードを再入力するのではなく、接続を維持したいと思います。
swift - 周辺機器が接続されていません - Swift
Swift アプリ内に、Bluetooth デバイスを見つけて接続するビューがあります。Bluetooth デバイスの電源が入っています。デバイスをスキャンして見つけることができた後、関数を呼び出してデバイスに接続しましたが、フィードバックがありません。接続できない理由がわかりません。
didFailToConnectPeripheral も didConnectPeripheral も値を返しません。
これを機能させるにはどうすればよいですか?
iphone - CoreBluetooth APIMISUSE (コマンドの送信 - 周辺機器が接続されていません)
私が使用しているシステムは、次のシナリオを使用しています。
- Bluetooth LE デバイスへの接続
- サービスと特徴を発見する
- コマンドを TX 特性に書き込み、応答を受け取る
上記は 90% の時間で問題なく動作します。ときどき、システムは 3 番目のステップが常に失敗する状態になります (ステップ 1 と 2 が成功したにもかかわらず、デバイスからの応答はまったくありません。アプリ / 電話 / BLE デバイスを再起動しても、これは解決しません。ブロックは一定です。何が解決しますか)問題は、iOS システム設定からデバイスを手動でペアリング解除することです.BLE 診断ログを見ると、次のようになります:
「pon.mar 7 21:27:30 設定 [380]: [CoreBluetooth] API の誤用: 接続状態でのみコマンドを受け入れることができます」
ただし、コマンドを送信する前にアプリをデバッグしたところ、100% 接続が確立され、サービスと特性が検出されました。何か案が?同様の問題に直面している人はいますか?
ios - centralManagerDidUpdateState が呼び出されない
私は iOS コーディングは初めてではありませんが、iOS の BLE は初めてです。
BLE デバイスにアクセスして書き込むためのコードを Main View Controller に正常に記述しました。そのため、すべての周辺機器とマネージャーがテストされます。
私のアプリは、BLE デバイスのリストを取得し、それらに接続してシリアル番号を取得し、それらから切断してから、それらを tableView に配置します。ユーザーがいずれかを選択したら、別のビューに移動して再接続する必要があります。周辺機器に接続するためのユーティリティとして別のクラスを作成したいと思います。これは、ユーティリティに正常に渡され、ユーティリティで読み書きされます。peripheral.state が接続されています。
周辺機器に書き込もうとするたびに、コードがクラッシュします。ただし、ペリフェラルは、データが書き込まれたことを報告します。
何が問題だったのかを理解するために、周辺機器を読み始めましたが、同じ結果でした。Crash です。
ユーティリティで新しいマネージャーを開始していますが、centralManagerDidUpdateState がそこで呼び出されません。また、周辺機器を知っていればうまくいくとマネージャーが考えずに試してみました。
では、centralManager を新しいクラスで動作させるにはどうすればよいでしょうか? メインクラスでマネージャーをどうにかして停止する必要がありますか?
これは、メイン コントローラーでは機能するが、ユーティリティでは機能しない行です。
ありがとう!
ios - 電源切り替え後に iOS 周辺機器が書き込み要求を受信しない
CBPeripheralManager私は、いくつかの特性を持つサービスと周辺機器として設定されている iOS アプリを持っています。ユーザーがコントロール センターを開いて Bluetooth のオフとオンを切り替えた後、再接続を試みています。サービスが正常にアドバタイジングを再開したように見えますが、書き込み要求のコールバックを取得していません。電話がかかることを期待‑peripheralManager:didReceiveWriteRequests:していますが、Bluetooth が再びオンになると電話がかかりません。
この場合、何か特別なことはありますか? ドキュメントによるとCBPeripheralManager、周辺機器の状態が PoweredOff を下回った場合にのみ、明示的にアドバタイズを再開する必要があります。PoweredOff に移動してから PoweredOn に移動し、クエリを実行すると‑isAdvertisingが返さYESれ、サービスが既に追加されているため、サービスを追加すると例外が発生してクラッシュします。
ios - CoreBluetooth `retrieveConnectedPeripheralsWithServices` は切断された周辺機器を返します
CBManagerのセマンティクスについて疑問に思いretrieveConnectedPeripheralsWithServicesます。これを使用するたびにCBPeripheral、 state でインスタンスが返されますCBPeripheralStateDisconnected。
再接続しても問題ありませんが、このメソッドは接続された周辺機器を返すはずではありませんか?
ios - 範囲外の複数の BLE を同時に検出する最良の方法は何ですか?
問題文 : 端に複数の BLE があり、それらを 1 つずつ接続する場合。しかし、複数の BLE が同時に範囲外になると、コア Bluetooth フレームワークの中央マネージャーで状態を検出できません。
説明 -
1) 単一の BLE があり、その BLE に接続している場合、その BLE が範囲外になると- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error、周辺機器のメソッドが呼び出されます。
2)メソッドで、BLE が再び範囲内に入るたびに接続するように- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error呼び出しを行いました。- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
3) この動作は、一度に 1 つの BLE が範囲外に移動した場合にうまく機能します。範囲に入ったら再度接続します。
4) ただし、複数の BLE が同時に範囲外になると、上記の動作はうまく機能しません。
ここに私の- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)errorコードがあります
前もって感謝します。