2

私がやろうとしていること: SPP を使用して Bluetooth を使用して生体認証デバイスからデータを取得するアプリケーションに取り組んでいます。そのために、いくつかのコマンド (バイトおよび HEX 形式) と生体認証デバイスの製造元から提供された手順があります。

私の問題:データを取得するには、2つの手順に従う必要があります。つまり、2つのコマンドを次々に送信します。生体認証デバイスは、2 番目のコマンドを受信するとデータを返します。デバイスとの接続を正常に確立し、最初のコマンドを実行しましたが、デバイスに 2 番目のコマンドを送信すると、アプリがスタックし、しばらくして生体認証デバイスが接続を終了し、IO 例外を受け取ります: ソケットが閉じられました。2 番目のコマンドで何が起こっているのか理解できません.

私は完了しました: Android SDK サンプルで提供されている Bluetooth チャットの例から BluetoothChatService.class を使用し、必要に応じてConnectThreadスレッドの Run 関数を変更しました。つまり、この関数でコマンドを送信しています。そして、「00001101-0000-1000-8000-00805F9B34FB」UUIDを使用しました。ソケットに接続するために、次のコードを試しました:

if (Build.VERSION.SDK_INT > 9) {
                tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
            }
            else {
                tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
            }

Method m = device.getClass().getMethod("createRfcommSocket", 
                    new Class[] { int.class });
            tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));

tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

私が間違っている場所を知っている人はいますか?

前もって感謝します。しかし、これらの1つで私の問題を解決できます。

編集 私はこの問題を解決しました。ソケット接続を確立しているメソッドは次のとおりです

if (Build.VERSION.SDK_INT < 10){
Method m = device.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));

}

else{ tmp = device.createRfcommSocketToServiceRecord(MY_UUID); }

4

1 に答える 1

0

生体認証デバイスがセキュリティを要求している可能性がありますか? また、Bluetooth セキュリティ手順が実行されていない場合、切断される可能性があります。いくつかの質問: Android のどのバージョンを使用していますか? デバイスの SPP 接続要件 (セキュリティ要件) を知っていますか? また、問題を確認するために Bluetooth logcat トレースを共有します

于 2013-01-23T18:34:09.223 に答える