Hallo zusammen.
Ich verwende für meine App die Library FastBLE um mich mit einem anderen Gerät per Bluetooth Low Energy zu verbinden:
FastBLE
Das klappt auch alles soweit, nur kann ich irgendwie keine Daten empfangen, warum auch immer.
Vorher hatte ich die Library EasyBLE und hatte genau das gleiche Problem.
Die Verbindung klappt und das einmalige auslesen, sobald er Verbunden ist, klappt auch.
Nur bekomme ich es nicht hin, weitere Daten auszulesen, wenn neue Daten gesendet wurden.
Ich denke, dass das Problem hier dran liegt:
Er wirft bei notifyCallback eine Exception aus, mit dem Inhalt "null".
Kann mir da wer Weiterhelfen?
Ich bin an diesem Problem schon mehrere Tage dran, leider ohne Erfolg.
Ich bedanke mich im Voraus für die Hilfe.
Gruss
Ich verwende für meine App die Library FastBLE um mich mit einem anderen Gerät per Bluetooth Low Energy zu verbinden:
FastBLE
Das klappt auch alles soweit, nur kann ich irgendwie keine Daten empfangen, warum auch immer.
Vorher hatte ich die Library EasyBLE und hatte genau das gleiche Problem.
Java:
BleManager.getInstance().init(getApplication());
BleManager.getInstance()
.enableLog(true)
.setReConnectCount(1, 5000)
.setConnectOverTime(20000)
.setOperateTimeout(5000);
BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
.setDeviceName(true, "Test")
.setAutoConnect(true)
.setScanTimeOut(10000)
.build();
BleManager.getInstance().initScanRule(scanRuleConfig);
startScanAndConnect();
Java:
private final BleNotifyCallback notifyCallback = new BleNotifyCallback() {
@Override
public void onNotifySuccess() {
Toast.makeText(MainActivity.this, "onNotifySuccess", Toast.LENGTH_LONG).show();
}
@Override
public void onNotifyFailure(BleException exception) {
Toast.makeText(MainActivity.this, "onNotifyFailure: "+exception.toString(), Toast.LENGTH_LONG).show();
System.out.println("onNotifyFailure: "+exception);
}
@Override
public void onCharacteristicChanged(byte[] data) {
String s = new String(data, StandardCharsets.UTF_8);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
};
private final BleReadCallback bleReadCallback = new BleReadCallback() {
@Override
public void onReadSuccess(byte[] data) {
BleManager.getInstance().setMtu(myBleDevice, 100, new BleMtuChangedCallback() {
@Override
public void onSetMTUFailure(BleException exception) {
System.out.println("onSetMTUFailure: "+exception.getDescription());
}
@Override
public void onMtuChanged(int mtu) {
((HomeFragment) homeFragment).bleConnected();
BleManager.getInstance().notify(myBleDevice, "19b10000-e8f2-537e-4f6c-d104768a1214", "19b10001-e8f2-537e-4f6c-d104768a1214", notifyCallback);
String s = new String(data, StandardCharsets.UTF_8);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onReadFailure(BleException exception) {
Toast.makeText(MainActivity.this, "onReadFailure: "+exception.getDescription(), Toast.LENGTH_LONG).show();
}
};
private void startScanAndConnect() {
BleManager.getInstance().scanAndConnect(new BleScanAndConnectCallback() {
@Override
public void onScanFinished(BleDevice scanResult) {
if (scanResult == null) {
myBleDevice = null;
((HomeFragment) homeFragment).bleConnectFail();
Toast.makeText(MainActivity.this, "Kein Gerät gefunden!", Toast.LENGTH_LONG).show();
}
}
@Override
public void onStartConnect() {
}
@Override
public void onConnectFail(BleDevice bleDevice, BleException exception) {
myBleDevice = null;
((HomeFragment) homeFragment).bleConnectFail();
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
myBleDevice = bleDevice;
BleManager.getInstance().read(bleDevice, "19b10000-e8f2-537e-4f6c-d104768a1214", "19b10001-e8f2-537e-4f6c-d104768a1214", bleReadCallback);
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) {
myBleDevice = null;
((HomeFragment) homeFragment).bleDisConnected();
}
@Override
public void onScanStarted(boolean success) {
((HomeFragment) homeFragment).bleScanStarted();
}
@Override
public void onScanning(BleDevice bleDevice) {
}
});
}
Die Verbindung klappt und das einmalige auslesen, sobald er Verbunden ist, klappt auch.
Nur bekomme ich es nicht hin, weitere Daten auszulesen, wenn neue Daten gesendet wurden.
Ich denke, dass das Problem hier dran liegt:
Java:
BleManager.getInstance().notify(myBleDevice, "19b10000-e8f2-537e-4f6c-d104768a1214", "19b10001-e8f2-537e-4f6c-d104768a1214", notifyCallback);
Kann mir da wer Weiterhelfen?
Ich bin an diesem Problem schon mehrere Tage dran, leider ohne Erfolg.
Ich bedanke mich im Voraus für die Hilfe.
Gruss