Failed attempt at fixing bluetooth timeout error.
Kept getting a message in the Bluetooth _client_, which said the socket timed out or received an invalid response or something. Most people seem to believe that it is due to a bug in the Bluetooth stack on Android 4.2.1 and suggest using reflection to access a method that actually works as intented. I couldn't get it to work correctly though. Kept the code here because this whole branch is a WIP, and we need to figure out how to make Bluetooth work one way or another.
This commit is contained in:
parent
c57f7105e1
commit
8ddc6a656d
@ -3,8 +3,11 @@ package org.fdroid.fdroid.net.bluetooth;
|
|||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.bluetooth.BluetoothSocket;
|
import android.bluetooth.BluetoothSocket;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class BluetoothClient {
|
public class BluetoothClient {
|
||||||
|
|
||||||
@ -22,10 +25,36 @@ public class BluetoothClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothConnection openConnection() throws IOException {
|
public BluetoothConnection openConnection() throws IOException {
|
||||||
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(BluetoothConstants.fdroidUuid());
|
BluetoothSocket socket = null;
|
||||||
BluetoothConnection connection = new BluetoothConnection(socket);
|
try {
|
||||||
connection.open();
|
socket = device.createInsecureRfcommSocketToServiceRecord(BluetoothConstants.fdroidUuid());
|
||||||
return connection;
|
BluetoothConnection connection = new BluetoothConnection(socket);
|
||||||
|
connection.open();
|
||||||
|
return connection;
|
||||||
|
} catch (IOException e1) {
|
||||||
|
Log.e(TAG, "There was an error while establishing Bluetooth connection. Falling back to using reflection...");
|
||||||
|
Class<?> clazz = socket.getRemoteDevice().getClass();
|
||||||
|
Class<?>[] paramTypes = new Class<?>[]{Integer.TYPE};
|
||||||
|
|
||||||
|
Method method;
|
||||||
|
try {
|
||||||
|
method = clazz.getMethod("createInsecureRfcommSocket", paramTypes);
|
||||||
|
Object[] params = new Object[]{1};
|
||||||
|
BluetoothSocket sockFallback = (BluetoothSocket) method.invoke(socket.getRemoteDevice(), params);
|
||||||
|
BluetoothConnection connection = new BluetoothConnection(sockFallback);
|
||||||
|
connection.open();
|
||||||
|
return connection;
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
throw e1;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw e1;
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
throw e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't catch exceptions this time, let it bubble up as we did our best but don't
|
||||||
|
// have anythign else to offer in terms of resolving the problem right now.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user