Próbuję wykryć, czy urządzenie bluetooth jest obecnie połączone z urządzeniem z systemem Android przy użyciu interfejsu API 14 lub nowszego. Wygląda na to, że powinienem móc korzystać z metody BluetoothSocket.isConnected(), ale bez względu na to, co zrobiłem, do tej pory po prostu dostaję fałszywą odpowiedź za cokolwiek, połączoną lub nie.Android BluetoothSocket.isConnected zawsze zwraca wartość false
AndroidManifest obejmuje następujące linie:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Locale 4.x supports API 14 or greater. -->
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
<uses-feature android:name="android.hardware.bluetooth" />
a kod w pytaniu:
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
Log.i(Constants.LOG_TAG, String.format(Locale.US, "Device: %s connected: %b", device.getName(), isConnected(device))); //$NON-NLS-1$z
}
}
private boolean isConnected(BluetoothDevice device) {
BluetoothSocket socket = null;
// Get a BluetoothSocket for a connection with the given BluetoothDevice
UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
try {
socket = device.createRfcommSocketToServiceRecord(SPP_UUID);
} catch (IOException e) {
Log.e(Constants.LOG_TAG, e.getMessage()); //$NON-NLS-1$z
return false;
}
Log.i(Constants.LOG_TAG, socket.toString()); //$NON-NLS-1$z
return socket.isConnected();
}
są wyrzucane żadne błędy, po prostu wraca "false" 100% czasu. Czy jest coś, co nie robię dobrze?
Część refleksyjna pochodziła z zaakceptowanej odpowiedzi na to pytanie: http://stackoverflow.com/questions/3397071/service-discovery-failed-exception-using-bluetooth-on-android.Nie byłem zachwycony ideą refleksji, ale myślę, że pamiętam gdzieś indziej, że nie powinieneś polegać na UUID z pierwotnego pytania. Powiedziawszy to, ważną kwestią jest dla mnie druga część twojej odpowiedzi - Próbuję znaleźć jakiekolwiek podłączone urządzenia BT, a nie próbuję się połączyć. Czy to nie jest możliwe? Próbuję uniknąć konieczności tworzenia usługi monitorującej zmiany stanu BT. – jkane001
Ameen miał rację, po bardziej uważnej lekturze odpowiedzi na SO i dokumentacji Android, zdałem sobie sprawę, że nie było tutaj potrzeby refleksji. Zaktualizowałem moje pierwotne pytanie lepszą metodą "isConnected", ale moje pytanie pozostaje: czy istnieje sposób na wykrycie, czy urządzenie BT jest połączone bez połączenia z nim? – jkane001