Fehler bei read() von InputStream (Bluetooth)

S

Steini99

Gast
Hallo,

ich verwende eine Bluetooth-SPP-Verbindung, wobei die App bereits tadellos funktioniert hat (als Gegenstück diente das BlueNiceCom3 mit einem Mikrocontroller).
Leider mussten wir auf das BlueNiceCom4 umsteigen, wodurch ich jetzt einen eigenartigen Fehler bekomme: Die Verbindung lässt sich weiterhin aufbauen, auch das Senden von Bytes funktioniert einwandfrei - wenn ich nun versuche, Bytes zu lesen, funktioniert das nur genau einmal; beim wiederholten Klick auf den Button hängt sich die App auf (ANR).
Vom read()-Befehl werden jedoch keine Exceptions geworfen :confused:

Diesen LogCat-Eintrag bekomme ich beim verbinden:

E/BluetoothEventLoop.cpp(232): event_filter: Recieved signal org.bluez.Device:propertyChanged from /org/bluez/xxxx/hci0/dev_xx_xx_xx_xx_xx_xx
(also mit der richtigen Adresse halt)

Beim 2. read() hängt sich nun die App auf, in der LogCat steht dazu nur:

ANR in com.<meineApp>
Reason: keyDispatchingTimedOut

Kann der Fehler mit diesem Modus-wechsel zusammenhängen..? Im Datenblatt steht dazu, dass das Bluetoothmodul beim Verbinden in einen reinen Datenübertragungsmodus wechselt..

mfg
 
Läuft das Lesen bei dir in einem eigenen Thread?
 
das lesen & schreiben läuft beides im selben Thread..
 
Bist du sicher, dass die Verbindung noch über SPP und nicht über HID läuft?
 
das modul unterstützt lt. Datenblatt nur SPP, SDAP und GAP..
die Verbindung baue ich auf mit:
BTSocket = device.createRfcommSocketToServiceRecord(UUID);
BTSocket.connect(); (also natürlich innerhalb der try&catch-blöcke)
 
Und die UUID passt zum Service Record des Moduls? Benutzt du API Level 15? Da kannst du UUIDs in den Geräteeigenschaften abfragen. Vorher geht das leider nicht.
 
Hi Steini99,

ich hab mein alten Code durchkrämpelt:

Code:
BroadcastReceiver mReceiver = new BroadcastReceiver() {
			@Override
			public void onReceive(Context context, Intent intent) {
				BluetoothDevice deviceExtra = intent
						.getParcelableExtra("android.bluetooth.device.extra.DEVICE");
				Parcelable[] uuidExtra = intent
						.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
				// Parse the UUIDs and get the one you are interested in

				Log.d("test", deviceExtra.getName());
				Log.d("test", Arrays.toString(uuidExtra));
			}
		};

		String action = "android.bleutooth.device.action.UUID";
		IntentFilter filter = new IntentFilter(action);
		registerReceiver(mReceiver, filter);

Beim Pairen/Verbinden eines BT-Geräts solltest du alle GUIDs ausgegeben bekommen, die dein device unterstützt.

Habs nicht mehr ausprobiert, glaub aber, dass der Schnipsel damals seine arbeit erfüllt hat.
(API 8+)

regards
 
Hallo Leute,

habe eben erst gerade diesen Thread gefunden.
Ich habe exakt das selbe Problem wie Steini99 und bin gerade ziemlich am Frustrieren.
Weiß jemand eine Lösung, ich brauche sie echt dringend!

danke
 

Ähnliche Themen

S
Antworten
4
Aufrufe
4.424
mblaster4711
mblaster4711
D
Antworten
17
Aufrufe
404
datNeMo
D
M
Antworten
3
Aufrufe
160
moin
M
Zurück
Oben Unten