私がやろうとしていること: 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); }