9

私はインターネットを検索してきましたが、OOB ペアリングを正確に実装する方法については何も見ていません。ここの誰かが私を助けるためにいくつかのサンプルコードを教えてくれることを望んでいました. Android デベロッパー サイトのチャットの例では、このタイプのペアリングについてはまったく触れていません。

基本的に、ディスプレイ/IO メカニズムが組み込まれていない C++ で記述されたデバイスと安全にペアリングしたい Android タブレットがあります。ペアリングするタブレットは GUI/IO インターフェイスとして機能し、Bluetooth 経由でメッセージを送受信します。したがって、OOB ペアリング スキームを使用して、タブレットを各デバイスと安全にペアリングしたいと考えています。

OOB の概念は理解していますが、android.developers.com サイトで自分の Android クライアント コードを探しているときに呼び出す適切なメソッドを見つけるのが困難です。また、bluez の内容を見ても、C++ で記述されたサーバーで行うべきことがあまり見つかりません。

基本的な使用例は、ユーザーが USB 接続を介してタブレットをデバイスに接続することです。USB 接続は、各デバイスのキー/MAC アドレスの受け渡しを容易にし、その情報を使用して Bluetooth を相互にペアリングします。

USB の部分はわかりますが、クライアントとサーバーにキーと必要な情報を取得すると、両端を呼び出して正常かつ安全にペアリングするための正しい方法を追跡できないようです。

安全でない接続を介して話しているクライアント/サーバーが既にあるので、実際に問題を抱えているのは、実際に両端でペアリングすることだけです。ペアになると、今後のすべてのメッセージングに secureRFComm を使用できます。

4

2 に答える 2

11

問題は 95% 解決しましたが、小さな障害物にぶつかりました。最初に、元の質問に対するより具体的な回答でこの投稿を更新し、最後に質問を投稿します。

要約すると、私のタスクは、帯域外 (oob) ペアリングを使用して、Honeycomb 3.2 を使用する Android タブレットを USB 経由でビーグル ボードに安全にペアリングすることです。特定のコードを投稿することはできませんが、これを行うために必要なすべての手順を紹介します。

ビーグル ボードには、dbusoob プラグインがインストールされた bluez 4.96 スタックがインストールされています。これが正しく設定されていることを確認するには、ビーグル ボードに 2 つの Bluetooth ドングルをインストールし、test フォルダーの bluez アーカイブにある OOB テスト コードを実行します。これは Python スクリプトです。スクリプトは 2 つの Bluetooth ドングルを正常にペアリングする必要があります。そうでない場合、bluez が正しくセットアップされていない可能性があります。

タブレットで USB 通信を行うには、mtpfs と mtp-tools をインストールする必要があります。これらはタブレットを取り付けるために使用されます。2つのデバイス間でOOB情報を取得する方法は、タブレットをビーグルボードにマウントすることでした。タブレットとビーグル ボードをマウントすると、必要な情報を含むファイルを書き出すことができます。

Android 側では、パブリック API で OOB がサポートされていないため、注意が必要です。これは、Honeycomb 3.2 には公式に OOB 結合をサポートする bluez スタックがないためだと思いますが、Google にはある種の実装がコード化されています。Bluetooth アダプターと Bluetooth デバイス クラスのジンジャーブレッド ソース コードを見ると、ドキュメント化された API を介して公開されていないが、使用可能な OOB メソッドを参照してください。

これらのメソッドはまだ公開されているため、リフレクションを通じて呼び出すことができます。リフレクションを使用すると、クラス内のすべてのメソッド シグネチャを取得することもできます。これが、私が利用できる方法を見つけた方法です。

ただし、多くは文書化されておらず、一部の機能が明らかでないことに注意してください。注意すべき重要なものは、アダプタ クラスの readOutOfBandData() とデバイス クラスの setDeviceOutOfandData() です。

遭遇する可能性のあるもう 1 つの落とし穴は、oob データをタブレット上のファイルに書き込んで、ビーグル ボードに読み込ませる場合です。Android は mtp を使用するため、ファイルが内部 SD カード ストレージに書き込まれた後にインデックスを作成する必要があります。これを解決するには、MediaScannerConnection クラスと scanFile() メソッドを使用する必要があります。

上記が同じ問題を抱えている他の人の助けになることを願っています。

それでは私の質問に移りましょう。私は Android アプリケーションをうまく機能させており、私のビーグル ボード コードは testOOB の例で、ファイルから OOB 情報を読み取るように更新されています。今私が目にする問題は、実行すると全員がお互いをよく見ていることですが、タブレットではデバイス xyz とペアリングするかどうかを尋ねるメッセージが表示されます。キーや数字はありません。「デバイスXYZとペアリング」またはそれらの行に沿った何かを尋ねるだけです。

「ペアリング」を押すと、タブレットの観点からはすべてペアリングされますが、Python スクリプトはペアリングが失敗したことを返します。ビーグル ボード上の python スクリプトは、デバイス間のボンディングを行う実際のメソッドを呼び出しています。Android に createBond 呼び出しを開始させても、同じ結果が表示されます。両方のケースでペアリングを試みる前に、両端で必要な OOB データを設定したことを保証できるので、そうではないようです。

だから、誰かが私を助けてくれることを望んでいる私の問題は次のとおりです。

1) OOB データが適切に交換されている場合、Android でメッセージが表示されるのはなぜですか? 私が見逃している別の電話はありますか? どちらの側ですか?

2) タブレットに表示された「ペアリング」ポップアップを押しても、ビーグル ボードの python スクリプトがペアリングに失敗したことを返すのはなぜですか。タブレットとブルース モニターの両方に、デバイスがペアリングされていることが示されます。もう一度、何かが欠けているという考えに傾いています。

助けてくれる人に感謝します:)

編集:

ここにさらに情報を追加するには、logcat の出力を示します。

D/UIBluetooth( 4363): !!!!!! Start Bond !!!!!!
D/BluetoothService( 1703): Setting out of band data for: 00:02:76:24:C2:8F:[-37, -1, 65, -42, -121, -75, -60, -4, -47, -86, -88, 14, 64, 83, 16, 96]:[-112, 34, 121, -97, 15, -54, -83, -
93, 104, -83, -124, -25, 89, 114, 66, 62]
D/BluetoothBondState( 1703): 00:02:76:24:C2:8F bond state 10 -> 11 (0)
D/UIBluetooth( 4363): createOobBond Successful
V/BluetoothEventManager( 2174): Received android.bluetooth.device.action.BOND_STATE_CHANGED
D/BluetoothEventLoop( 1703): Property Changed: Devices : 1
D/BluetoothEventLoop( 1703): Device property changed: 00:02:76:24:C2:8F property: Connected value: true
I/BluetoothEventLoop.cpp( 1703): agent_event_filter: Received method org.bluez.Agent:RequestOobData
I/BluetoothEventLoop.cpp( 1703): agent_event_filter: Received method org.bluez.Agent:RequestOobData

最後の 2 行は、問題のデバイスとペアリング/キャンセルするために Android のポップアップをトリガーしているようです。Android には、自動結合することだけを知ってもらいたいと思います。私が知っている限り、私は電話に出られなかったり、何か異常なことをしている可能性があります. 私のコードで最後に行うことは、それを行うための明らかな場所と思われる結合を作成することです....

ご提案ありがとうございます。

于 2011-08-18T05:09:04.680 に答える
3

android には、OOB ペアリングを可能にするパブリック API はまだありません。OOB ペアリング フックをアプリケーションに公開するために、基礎となる BlueZ スタックを変更できる、または変更する意思がある場合、それは可能です。(重要なタスク)

どの OOB メカニズムを使用する予定ですか? NFC ?

于 2011-08-03T00:40:49.653 に答える