2017-12-06 4 views
0

nach Verbindungsaufbau lesen Ich möchte den Wert aus dem Merkmal lesen und den Wert in einem Byte-Array speichern.Wert der Kennlinie nach dem Verbindungsaufbau zum Dienst Bluetooth Low Energy Android

Hier ist meine Funktion für das Lesen in meinem BluetoothLeService:

public byte[] readWhiteAndIntensityCharacteristic() { 
if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
    Log.w(TAG, "BluetoothAdapter not initialized"); 
    return null; 
} 
/*check if the service is available on the device*/ 
BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString(UuidAdresssService)); 
if (mCustomService == null) { 
    Log.w(TAG, "Custom BLE Service not found"); 
    return null; 
} 
/*get the read characteristic from the service*/ 
BluetoothGattCharacteristic mReadCharacteristic = mCustomService.getCharacteristic(UUID.fromString(UuidAdresssWhiteAndIntensityCharastic)); 
byte[] messageByte = mReadCharacteristic.getValue(); 
if (messageByte != null && messageByte.length > 0) { 
    final StringBuilder stringBuilder = new StringBuilder(messageByte.length); 
    for (byte byteChar : messageByte) 
     stringBuilder.append(String.format("%02X", byteChar)); 
    s = "0x" + stringBuilder.toString(); 
    Log.v("Scan Activity", s); 
    if (mBluetoothGatt.readCharacteristic(mReadCharacteristic) == false) { 
     Log.w(TAG, "Failed to read characteristic"); 
    } 
} 
return messageByte; 

} Diese Funktion in meinem DeviceControlActivity aufgerufen:

public void getStartUpValue(){ 
    Log.w(TAG, "Reading completed");} 
    if(mBluetoothLeService.readWhiteAndIntensityCharacteristic() == null) 
    { 
     Log.w(TAG, "FAILED Reading value failed"); 
    } 
    startValue = mBluetoothLeService.readWhiteAndIntensityCharacteristic(); 
    Log.w(TAG, "Reading completed"); 

} 

ich die getStartUpValue Funktion aufrufen, nachdem die Verbindung hergestellt ist.

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); 
    if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) { 
     mConnected = true; 
     updateConnectionState(R.string.connected); 
     invalidateOptionsMenu(); 
    } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) { 
     mConnected = false; 
     updateConnectionState(R.string.disconnected); 
     invalidateOptionsMenu(); 
     clearUI(); 
    } else if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) { 
     // Show all the supported services and characteristics on the user interface. 
     mBluetoothLeService.getSupportedGattServices(); 
     getStartUpValue(); 

    } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) { 
     displayData(intent.getStringExtra(BluetoothLeService.EXTRA_DATA)); 

    } 
} 

};

Das Lesen schlägt jedes Mal fehl, aber das Senden von Werten an das Merkmal ist kein Problem.

Wie kann ich dieses Problem beheben?

+0

was, wenn Sie 'mBluetoothGatt.readCharacteristic (mReadCharacteristic) versuchen' statt 'mReadCharacteristic.getValue()'? Das Ergebnis der Leseoperation wird vom Callback 'onCharacteristicRead (BluetoothGatt, BluetoothGattCharacteristic, int)' gemeldet. –

Antwort

1

Die Lösung lautet: mBluetoothGatt.readCharacteristic (mReadCharacteristic)

Nach der Lektüre einen Rückruf beendet ist aufgerufen.

Dank Andrew Vovk

Verwandte Themen