2017-08-27 14 views
0

最初のアプローチ後に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 

、何とか、多分ここに私の問題の原因は何ですか?

答えて

0

このデバイスはBluetooth Classicをサポートしておらず、BLEの上にのみ構築された対話が可能です。

関連する問題