Gegevens lezen van bluetooth-apparaat in Android

Ik gebruik een bluetooth-chat om gegevens van een Bluetooth-apparaat te verbinden en te ontvangen.

Ik gebruik de volgende code voor het lezen van gegevens:

public void run() {
    byte[] buffer = new byte[1024];
    int bytes;
    Log.v("MR", "start listening....");

   //Keep listening to the InputStream while connected
    while (true) {
        try {
           //Read from the InputStream
            Log.d("MR", "buffer in try");

            bytes = mmInStream.read(buffer);
            Log.d("MR", "input stream :"+(new String(buffer)));
           //Send the obtained bytes to the UI Activity
            mHandler.obtainMessage(Conn.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
            Log.d("MR", "buffer after");

        } catch (Exception e) {
            Log.e("MR", "Error :"+e.getMessage());
            //
            connectionLost();
          //break;
        }

        Log.d("MR", "buffer after while");
    }
}

Het apparaat verzendt de hele tijd gegevens zonder te stoppen.

Met de bovenstaande code krijg ik het bericht van:

Log.d("MR", "buffer in try");

dan gaat het naar de volgende regel:

bytes=mmInStream.read(buffer);

en keert nooit terug van die oproep. Ik denk dat dit komt omdat het begint met het lezen van gegevens van het apparaat en niet stopt totdat het de verbinding verbreekt. Hoe kan ik een bepaald aantal bytes per keer lezen?

Bewerken

Tenzij het blijft bij de code bytes = mmInStream.read (buffer); , omdat het dan geen gegevens terug van het apparaat krijgt?

14
met precies hetzelfde probleem
toegevoegd de auteur S H, de bron
Upvotes zou leuk zijn lol ... ik hoop dat je wat succes hebt
toegevoegd de auteur JPM, de bron
Het probleem is misschien niet de zekerheid dat ik bovenaan schrijf. ik denk dat het de poort is dat het de communicatie maakt. is het mogelijk dat de twee apparaten worden aangesloten, maar op de socket kan niets worden verzonden. Is er iets mis met de communicatie?
toegevoegd de auteur prokopis, de bron

1 antwoord

Ik gebruik DataInputStreams in plaats daarvan, omdat je een readFully() -methode kunt doen die wacht met het lezen van een bepaald aantal bytes voordat je terugkeert. Ik heb de BT-verbinding zo ingesteld:

BluetoothDevice btDevice = bta.getRemoteDevice(macAddress);
BluetoothSocket btSocket = InsecureBluetooth.createRfcommSocketToServiceRecord(
                    btDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"), false);

btSocket.connect();
InputStream input = btSocket.getInputStream();
DataInputStream dinput = new DataInputStream(input);

later, wanneer ik wil lezen, gebruik ik readFully:

dinput.readFully(byteArray, 0, byteArray.length);
13
toegevoegd
@ prokopis, @ JPM: ik krijg hetzelfde probleem bij het verbinden van mijn bluetooth-bandsensor met mijn Android-telefoon. Het loopt vast als ik InputStream probeer te lezen. Kun je me alsjeblieft hiervoor helpen? Ik zou uw hulp zeer op prijs stellen. Mijn e-mail-ID is: [email protected]
toegevoegd de auteur YuDroid, de bron
Je kunt InsecureBluetooth.java hier downloaden ... code.google.com/p/payforwarding/source/browse/trunk/s‌ ource/& hellip;
toegevoegd de auteur JPM, de bron
Stap door de debugger en zie waar de code stopt, je kunt ook een fout gooien zonder het te weten, dus wikkel alles in een try-catch en ga vandaar. als het stopt bij readFully of het lezen en er nooit uitkomt, hebt u gelijk omdat het apparaat geen gegevens verzendt.
toegevoegd de auteur JPM, de bron
hmnm dat betekent dat uw apparaat niet verzendt ... kunt u de setup-code laten zien aan uw Bluetooth? Gebruikt u wat ik hierboven heb?
toegevoegd de auteur JPM, de bron
Lol dat is wat ik nu aan het doen ben met de telefoon, het maken van een ECG Phone-app met ons ECG-apparaat. Welke telefoon gebruikt u? Ik had problemen met SPP en sommige Android-telefoons werken niet met ons apparaat. Ook als je me je e-mail wilt sturen, kunnen we deze offline meenemen.
toegevoegd de auteur JPM, de bron
de Onveilige Bluetooth. is een klasse die je hebt gemaakt of iets dat ik moet importeren of een vervolg omdat ik niets kan vinden?
toegevoegd de auteur prokopis, de bron
ik heb het geprobeerd en ik maak verbinding op het apparaat. ik gebruik ook bond state om te controleren of is connect en ik krijg return code 12, wat betekent dat het goed is, maar ik krijg nog steeds geen data terug van het apparaat naar mijn Android-apparaat. het kan een probleem met de socket zijn?
toegevoegd de auteur prokopis, de bron
is verbonden en ik merk dat wanneer ik het Bluetooth-apparaat uitschakel en gegevens stuur naar het apparaat op mijn Android-apparaat ik IOException krijg. als ik niet verkeerd doe, betekent dit dat de socket dichtbij is en geen gegevens kan verzenden of ontvangen? als dit klopt, waarom ontvangt het geen gegevens voordat ik het Bluetooth-apparaat sluit?
toegevoegd de auteur prokopis, de bron
het wacht op de regel 'bytes = mmInStream.read (buffer);'
toegevoegd de auteur prokopis, de bron
dezelfde code gebruik ik het met de hyper terminal op mijn pc en ik kan zonder problemen gegevens verzenden en ontvangen tussen mijn Android-telefoon en pc. kan het iets zijn met de socketcommunicatie met het bepaalde apparaat dat verbinding kan maken maar geen gegevens kan verzenden tussen de Android-telefoon en mijn ECG-apparaat? mijn Android-apparaat Bluetooth-versie is 2.1 en het ECG-apparaat is 2.0. het kan een communicatieprobleem zijn met de versies van bluetooth?
toegevoegd de auteur prokopis, de bron
gebruik de htc-wens met Android 2.3.3 (alleen bijwerken) met bluetooth 2.1 en het ECG-apparaat is de dyna-vision outdoor met bluetooth 2.0. mijn e-mail is [email protected] ik zal het waarderen als je me wat kunt helpen of als ik iets weet dat ik het je kan geven.
toegevoegd de auteur prokopis, de bron