Bluetooth verbindet sich nicht mit 4.4.2
Ich habe ein Bluetooth-Gerät, das mit allen Android-Versionen verbunden ist, die ich vor 4.4.2 ausprobiert habe. Das Galaxy Tab 4 oder S3 lässt sich jetzt nicht anschließen. Das Tab 3 verbindet sich gut mit 4.1.2. Das Problem scheint im @ aufzutretAcceptThread
beim Versuch, das @ zu initialisierBluetoothSocket
. Der von mir verwendete Code basiert auf dem Chat-Beispiel in der SDK.
My Code akzeptieren
private class AcceptThread extends Thread {
// The local server socket
private BluetoothServerSocket mmServerSocket;
public boolean successInit = false;
public AcceptThread() {
closeAllConnections();
BluetoothServerSocket tmp = null;
// Create a new listening server socket
while(!successInit) {
try {
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
successInit= true;
Log.i("TAG", "Socket Server Created");
}
catch(Exception e) {
Log.i("TAG", e.getMessage());
successInit = false;
}
}
mmServerSocket = tmp;
}
public void run() {
BluetoothSocket socket = null;
// Listen to the server socket if we're not connected
Log.i("BluetoothComService", String.valueOf(mState));
while (mState != STATE_CONNECTED) {
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mAdapter.cancelDiscovery();
socket = BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(getThermMAC())
.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805F9B34FB"));
// socket = mmServerSocket.accept(); // here socket might be closed or timeout
Log.e("BluetoothComService", "No accept Exception");
}catch (IOException e) {
Log.e("TAG", e.getMessage());
}
getThermMAC()
oben ist meine Methode, um die Adresse des verbundenen Geräts zurückzugeben.
Imrun()
, wenn ich @ benut
socket=BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(getThermMAC())
.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805F9B34FB"));
dann bekomme ich einNPE
in Zeile 501 vonBluetoothSocket.java
im Android-Framework, das ist diese Zeile
int left = b.length;
So scheint es, dassb
istnull
aber es scheint nicht nach dem Debuggen zu sein.b
ist einbyte[]
die von meinem @ gesendet wiBluetoothService
Klasse, die eine brandneue, initialisierte @ sendbyte[]
aus demConnectedThread
genau wie das sdk-beispiel und wie ich es bei älteren versionen gemacht habe.
Wenn ich das auskommentiere und versuche, @ zu verwend
socket = mmServerSocket.accept();
was hat in der Vergangenheit gearbeitet, dann bekomme ich
bt socket is not in listen state
Also, ich weiß nicht, wie ich es in den "Listen-Status" versetzen soll oder warum es nicht so wäre. Hat jemand dies erlebt oder weiß, wie man es umgeht? Oder wie man das @ nicht bekomNPE
wenn ich das erste Snippet benutze (wenn das überhaupt stimmt).
Ich fan
Wenn ich ein @ bekommen haIOException
Ich fanddieser Beitra das hat mich geführtHie aber das hat mich nirgendwo hingekriegt.
Beachten Die Kopfgeldnachricht lautet 4.4.4, aber auf der Registerkarte 4 steht 4.4.2.
Gerätefehler
Ich bemerke diese Bluetooth-Fehler auch, wenn ich mein Gerät zum ersten Mal über USB an den Computer anschließe.
09-05 15:18:03.217: E/BluetoothServiceJni(15148): SOCK FLAG = 0 ***********************
09-05 15:18:13.177: E/BluetoothServiceJni(15148): SOCK FLAG = 0 ***********************
09-05 15:18:13.217: E/BluetoothServiceJni(15148): SOCK FLAG = 0 ***********************
aber ich konnte nicht herausfinden, was diese Flagge bedeutet.
Ich stelle fest, dass es bekannte Fehler im BT-Stack 4.x gibt Siehe einen von vielen Fehlerberichten)
minSDK
ist derzeit 10. Wenn ich jedoch eine funktionierende Lösung finde, kann ich das umgehen.