1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Android Bluetooth? =/

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Chaoz, 29.03.2010.

  1. Chaoz, 29.03.2010 #1
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    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;
                }
    }
            }
     
  2. Chaoz, 06.04.2010 #2
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    Irgendjmd eine Idee?
     
  3. so.r.u, 16.04.2010 #3
    so.r.u

    so.r.u Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    11.02.2010
    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".
     
  4. Chaoz, 16.04.2010 #4
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    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
     
    so.r.u bedankt sich.
  5. so.r.u, 16.04.2010 #5
    so.r.u

    so.r.u Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    11.02.2010
    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:

    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?
     
  6. Chaoz, 19.04.2010 #6
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    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
     
  7. so.r.u, 19.04.2010 #7
    so.r.u

    so.r.u Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    11.02.2010
    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;-)
     

Diese Seite empfehlen