Android Bluetooth Gerät ansprechen

  • 1 Antworten
  • Letztes Antwortdatum
F

fd1234

Neues Mitglied
0
Hallo,

habe vor kurzem mit der Entwicklung von Android apps angefangen und habe mir gleich ein ganz großes Projekt vorgenommen, und zwar wollte ich das thema bluetooth angehen und zwar per bluetooth Fitnessarmbänder auslesen. Ich habe ein Fitbit charge hr und wolllte davon die Daten auslesen bekomme es aber irgendwie nicht hin.

Hier mein Quellcode:

Code:
import android.annotation.SuppressLint;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

@SuppressLint("CutPasteId")
public class MainActivity extends Activity {
TextView myLabel;
EditText myTextbox;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;

Button openButton;
Button sendButton;
Button closeButton;

@override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    openButton = (Button) findViewById(R.id.open);
    sendButton = (Button) findViewById(R.id.send);
    closeButton = (Button) findViewById(R.id.close);
    myLabel = (TextView) findViewById(R.id.label);
    myTextbox = (EditText) findViewById(R.id.entry);
    // Open Button
    openButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try {
                findBT();
                openBT();
            } catch (IOException ex) {
            }
        }
    });

    // Send Button
    sendButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try {
                sendData();
            } catch (IOException ex) {
            }
        }
    });

    // Close button
    closeButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try {
                closeBT();
            } catch (IOException ex) {
            }
        }
    });
}

void findBT() {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter == null) {
        myLabel.setText("No bluetooth adapter available");
    }

    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBluetooth, 0);
    }

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    if (pairedDevices.size() > 0) {
        for (BluetoothDevice device : pairedDevices) {
            if (device.getName().equals("JD's Armband")) {
                mmDevice = device;
                break;
            }
        }
    }
    myLabel.setText("Bluetooth Device Found");
}

void openBT() throws IOException {
    myLabel.setText("openBT");

    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // Standard
                                                                            // SerialPortService
                                                                            // ID
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
    mmSocket.connect();
    mmOutputStream = mmSocket.getOutputStream();
    mmInputStream = mmSocket.getInputStream();
    myLabel.setText("listen");

    beginListenForData();

    // myLabel.setText("Bluetooth Opened");
}

void beginListenForData() {
    final Handler handler = new Handler();
    final byte delimiter = 10; // This is the ASCII code for a newline
                                // character
    myLabel.setText("1");

    stopWorker = false;
    readBufferPosition = 0;
    readBuffer = new byte[1024];
    workerThread = new Thread(new Runnable() {
        public void run() {
            myLabel.setText("2");
            while (!Thread.currentThread().isInterrupted() && !stopWorker) {
                try {
                    int bytesAvailable = mmInputStream.available();
                    myLabel.setText("3");
                    if (bytesAvailable > 0) {
                        byte[] packetBytes = new byte[bytesAvailable];
                        mmInputStream.read(packetBytes);
                        myLabel.setText("listen");

                        for (int i = 0; i < bytesAvailable; i++) {
                            byte b = packetBytes;

                            if (b == delimiter) {
                                byte[] encodedBytes = new byte[readBufferPosition];
                                System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
                                final String data = new String(encodedBytes, "US-ASCII");
                                readBufferPosition = 0;

                                handler.post(new Runnable() {
                                    public void run() {
                                        myLabel.setText(data);

                                    }
                                });
                            } else {
                                readBuffer[readBufferPosition++] = b;
                            }
                        }
                    }
                } catch (IOException ex) {
                    stopWorker = true;
                }
            }
        }
    });

    workerThread.start();
}

void sendData() throws IOException
{
    String msg = myTextbox.getText().toString();
    msg += "\n";
    mmOutputStream.write(msg.getBytes());
    myLabel.setText("Data Sent");
}


void closeBT() throws IOException {
    stopWorker = true;
    mmOutputStream.close();
    mmInputStream.close();
    mmSocket.close();
    myLabel.setText("Bluetooth Closed");
}

meinem Verstädnis nach sollte dieser dann die daten auf dem Label ausgeben da kommt aber leider nicht
 
Zuletzt bearbeitet von einem Moderator:
Bekommst Du denn irgendwas Sinnvolles (Log) ? Geht es dir dann nur um die Ausgabe ?

Und wenn du gar nichts bekommst :
Hast du denn von der FitBit auch das Kommunikatonsprotokoll ?

Es kann durchaus sein , dass du dieser erst mal einen Request schicken musst , um spezifizierte Daten von ihr wieder zu erhalten .
Ich kann mir auch vorstellen , dass das Ganze eher auf Handshake basis abläuft und wenn die Jungs "Fit"
waren, auch ggf verschlüsselt .
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
21
Aufrufe
1.179
swa00
swa00
Mr-Fisch
Antworten
5
Aufrufe
891
migi01
migi01
Mr-Fisch
Antworten
8
Aufrufe
957
Mr-Fisch
Mr-Fisch
M
Antworten
9
Aufrufe
731
mkuz24
M
A
Antworten
5
Aufrufe
667
swa00
swa00
Zurück
Oben Unten