Android Bluetooth? =/

Chaoz

Chaoz

Fortgeschrittenes Mitglied
13
Hey leudz,

ich hab folgendes problem:
nachdem ich ein verfügbares bluetoothDevice gefunden habe und diesem device (mein Blackberrry, später soll's an n bt-drucker gehen) eine Datei schicken will, krieg ich ein "IOException: Service discovery failed". =/

Jmd ne Idee woran das liegen könnte? (ist größtenteils trivial aus android.developer.com , aber die gehen immer von nem Client/Server aus... =/ )

folgender code:

Code:
public Connector(BluetoothDevice device)
        {
            
            BluetoothSocket tmp = null;

            try         // Get a BluetoothSocket to connect with the given BluetoothDevice
            {
                tmp = device.createRfcommSocketToServiceRecord(MY_UUID);       // MY_UUID is the app's UUID string, also used by the server code
            }
            catch (IOException e)
            {
                System.out.println(e.toString());
            }
            m_oSocket = tmp;
        }

        public void send()
        {
            // Cancel discovery because it will slow down the connection
            m_oBTAdapter.cancelDiscovery();

            try
            {
                // Connect the device through the socket. This will block
                // until it succeeds or throws an exception
                [B]m_oSocket.connect();[/B]
            }
            catch (IOException connectException)
            {
                try                 // Unable to connect; close the socket and get out
                {
[B]                    System.out.println(connectException.toString());[/B]
                    m_oSocket.close();
                }
                catch (IOException closeException)
                {
                    System.out.println(closeException.toString());
                }
                return;
            }
}
        }
 
Irgendjmd eine Idee?
 
Hast du eine Lösung gefunden? Ich habe einen externen Kompass mit angeschlossenem Bluetooth-Adapter (BlueSMiRF Gold), und versuche auch eine Verbindung aufzubauen mit connect(), leider auch mit der Fehlermeldung "Service discovery failed".
 
japp, hab ne lösung ^^

Die derzeitig (einzige) Möglichkeit in Android eine BluetoothVerbindung zu etablieren geht über SPP. Mein Fehler war, dass ich annahm, dass auch Obex (File Transfer), was ich schon aus der JSR82 und BB Implementierung kenne ebenfalls verfügbar ist.

Letztlich hab ichs dann geschafft meine Dateien über SPP an geräte zu übertragen die dies auch anbieten.
Das Problem ist natürlich, dass ich in diesem Falle nicht das "ich will meine datei an gerät-X schicken" gelöst habe, sondern nur sagen kann "ich kann meine datei an gerät-x schicken, wenn es SPP kann".

Lange rede kurzer Sinn:
Der Adapter MUSS SPP (SerialPortProfile) können, andernfalls kriegst du ne IOException die dir sagt, dass der (SPP) Service nicht gefunden wurde.

(n Klick auf den Dankebutton für die Aufklärung wäre nett =p)

Gruß
Chaoz
 
  • Danke
Reaktionen: so.r.u
Und wie hast du das genau gemacht? Ich hab das hier gefunden auf Bluetooth RFCOMM / SDP connection to a RS232 adapter in android - Stack Overflow:

... I had to use this UUID in order to connect to my SPP device:
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
Hab das mal in den Sample Code von dem BluetoothChat (siehe BluetoothChat - Bluetooth Chat | Android Developers) eingefügt. Wenn ich den ganzen accept-Teil auskommentiere, das heißt (glaube ich?) nicht mehr als Server sondern nur noch als Client auf Daten von meinem Sensor warte, empfange ich jetzt zumindest schon mal Daten. Allerdings bisher nur kryptische Zeichen, muss noch versuchen das geschickt zu parsen.
Ist die UUID oben so was wie eine allgemeine UUID auf der auf einer etwas niedrigeren Ebene alle Daten empfangen werden, die das andere Gerät aussendet?
 
soweit ich das mit der UUID in Android richtig verstanden hab, hat das nur eine Bewandnis um sicherzustellen dass ein server&client die gleiche UUID haben "müssen", deine angegegebene UUID hab ich glaube auch "so" verwendet ^^

Einzig was mich wundert: wenn dein kompass (war doch so?) DIR daten sendet, dann müsstest du doch der server sein (server empfängt, client sendet...)

gruß
chaoz
 
Das dachte ich eigentlich auch, dass ich der Server sein muss, habs auch versucht mit einer eigenen UUID (bzw der aus dem BluetoothChat-Beispiel, vllt war auch das der Fehler), und dann gewartet dass sich der Kompass auf meinen accept()-Aufruf verbindet, Fehlemeldung war dann immer "Service dicovery failed".

Soweit ich es jetzt verstanden habe, habe ich versucht, einen Dienst nach dem SDP (Service Discovery Protocol) anzubieten. Und das kann Android wohl nicht. Eine SPP-Verbindung auf einer etwas niedrigeren Schicht geht aber, wer in meinem Fall Client und wer Server ist, weiß ich allerdings nicht so genau...

Auf jeden Fall empfange ich momentan schonmal Daten, die sind zwar noch nicht besonders sinnvoll, aber ich hoffe das liegt erstmal nur an einer falschen Encodierung ;-=

Falls jemand mehr weiß zu den ganzen Protokollen und wer sich wann mit wem verbindet und was alles automatisch geht - immer her damit;-)
 

Ähnliche Themen

S
Antworten
4
Aufrufe
4.463
mblaster4711
mblaster4711
M
Antworten
4
Aufrufe
1.173
swa00
swa00
5
Antworten
0
Aufrufe
1.150
586920
5
Zurück
Oben Unten