L2cap socket

  • 4 Antworten
  • Letztes Antwortdatum
tarek857

tarek857

Neues Mitglied
0
Hallo,

ich versuche gerade, einen L2CAP-Socket-Client auf meinem Android-Gerät (Nokia G11, Android 11) zum Laufen zu bringen. Der Server läuft auf meinem Rechner und wurde mit dem l2test-Tool gestartet:


l2test -w -r -P 4113
l2test[1402702]: Waiting for connection on psm 4113 ...

Ich habe die Android-API verwendet, um einen Client zu erstellen. Die address-Variable enthält die MAC-Adresse meines Bluetooth-Geräts auf dem Rechner:
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
l2capSocket = device.createInsecureL2capChannel(psm);
l2capSocket.connect();
Wenn ich l2capSocket.connect(); aufrufe, erhalte ich folgenden Fehler:
read failed, socket might closed or timeout, read ret: -1
Hat jemand Erfahrung damit und kann mir weiterhelfen?
 
Ohne detaillierten LogCat ist aus der Ferne eine Ursache schwer auszumachen.

a) Target,MinSDK (29) stimmen ?
b) Unterstützt das Gerät denn L2CAP Kanäle extern und ist es für Entwickler verfügbar ? (Einige Systeme benutzen es nur intern)
c) Permissions in der Manifest gesetzt und auch zur Laufzeit angefordert (API23) ?

read failed, socket might closed or timeout, read ret: -1
d) Ist der Server auf dem PSM erreichbar ?

Alternative : RFCOMM
 
Zuletzt bearbeitet:
Die Berechtigungen sind vorhanden.
Ich habe den folgenden Code verwendet, um dies zu überprüfen:
if (context.checkSelfPermission(Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED ||
context.checkSelfPermission(Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED) {
return false;
}
03-21 14:54:03.407 D/BluetoothAdapter(29478): isLeEnabled(): ON
03-21 14:54:03.504 D/BluetoothGatt(19460): onConfigureMTU() - Device=D8:3A:dD:AC:E8:0B mtu=512 status=0
03-21 14:54:03.895 I/default (19460): Android SDK version: 30
03-21 14:54:03.895 I/default (19460): Using legacy BLUETOOTH permission for Android 11 and below
03-21 14:54:03.913 I/BluetoothL2CAPBridge(19460): Secure L2CAP socket created successfully
03-21 14:54:03.914 I/BluetoothL2CAPBridge(19460): Attempting to connect to L2CAP socket
03-21 14:54:04.269 D/BluetoothGatt(19460): onConnectionUpdated() - Device=D8:3A:dD:AC:E8:0B interval=9 latency=0 timeout=500 status=0
03-21 14:54:04.915 W/BluetoothAdapter(19460): getBluetoothService() called with no BluetoothManagerCallback
03-21 14:54:04.921 E/BluetoothL2CAPBridge(19460): Connection attempt 1 failed: read failed, socket might closed or timeout, read ret: -1
 
Zuletzt bearbeitet:
a)
Du forderst nicht alle notwendigen Permissions und Features an - Mit ADMIN alleine kommst du nicht weiter

b)
called with no BluetoothManagerCallback
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
l2capSocket = device.createInsecureL2capChannel(psm);
l2capSocket.connect();
Ein CallBack-Catch in einem Thread sollte auf alle Fälle dabei sein , damit du auf completition reagieren kannst , die Sockets sind default im Block-Mode - Erst dann solltest du loslegen


Referenz API Dokumenation :
Bluetooth overview | Connectivity | Android Developers
Bluetooth permissions | Connectivity | Android Developers
 
Zuletzt bearbeitet:
Ich benutze Android 11 und überprüfe diese Berechtigungen:
context.checkSelfPermission(Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED ||
context.checkSelfPermission(Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED ||
context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
Was brauche ich noch von Berechtigungen ?!
Hast du vielleicht ein Beispielcode mit der Android-API für mich?
 
Zurück
Oben Unten