最初のアプローチ後にIOExceptionが投げている:BluetoothSocketは、スレッドをロックし、ソケットを作成するために、しばらく
try {
socket = device.createRfcommSocketToServiceRecord(BSERVICE_UUID)
} catch(e: Exception) {
e.printStackTrace()
}
ソケットを作成するための第2の手法を:
:ソケットを作成するためにtry {
socket = device.createInsecureRfcommSocketToServiceRecord(BSERVICE_UUID)
} catch(e: Exception) {
e.printStackTrace()
}
第三のアプローチを
try {
socket = createRfcommSocket(device)
} catch(e: Exception) {
e.printStackTrace()
}
createRfcommSocket(デバイス)は次のように定義されています。
private fun createRfcommSocket(device: BluetoothDevice): BluetoothSocket? {
val method = device::class.java.getMethod("createRfcommSocket", Int::class.javaPrimitiveType)
return method.invoke(device, 1) as BluetoothSocket?
}
私が実際にnullでない参照の上)(BluetoothSocket#接続を呼び出す前に、これらのいずれかが実行されます。スレッドは、その後しばらくの間凍結とされている - 例外がスローされます。
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:581)
W/System.err: at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:558)
W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:374)
この問題に関連するすべてのデータ:ここでは対象となり
デバイスは、)(BluetoothAdapter#StartDiscoveryを経て発見されました適切な放送受信機を登録してください。プロセスは次のようになります:ACTIVE_DISCOVERY_FINISHEDインテントが受信された後、ローカルにデバイスをキャッシュし、BluetoothDevice#fetchUuidsWithSdp()の呼び出しを開始します。上記の問題の潜在的な原因は、ACTION_UUIDインテントでは、インテントから鍵BluetoothDevice.EXTRA_UUIDを使用して抽出されたUUID Arrayオブジェクトとしてnullを受け取ることです。
APIレベル19のSamsung Galaxy Tab Sでテスト済みです。ルーツではありません。 BLEでは、同じデバイスでうまく動作します。
UUIDはありません。標準では "00001101-0000-1000-8000-00805F9B34FB"も、デバイスのマニュアルに記載されている可能性もありません。
これに関する興味深い点は、リフレクションベースのソリューションでも同じ問題が発生していることです。
UPD:ログから別のものを見つけました。 connect関数は、私はこれを取得すると呼ば取得され、数秒後:最初の行は、グーグルには結果がありません
D/BluetoothSocket: SecProductFeature_BLUETOOTH.SEC_PRODUCT_FEATURE_BLUETOOTH_IT_POLICY_FEATURE = true
W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
、何とか、多分ここに私の問題の原因は何ですか?