Ich habe BLE Central in meiner App implementiert. Schritte:BLE onServicesDiscovered() nicht zurückgegebenen Eigenschaften Array
Get BluetoothManager
mBluetoothManager = (BluetoothManager) mContext.getSystemService (Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
Scan für Geräte
Connect-Gerät
mGatt = bluetoothDevice.connectGatt (dies, false, gattCallback);
Handle Rückruf und starten Service Discovery
Sobald das Gerät angeschlossen ist, ich einen Anruf mache Dienstleistungen zu entdecken.
gatt.discoverServices();
Sobald die Dienstleistungen, die es ich fangen in
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
Log.i("onConnectionStateChange", "Status: " + status);
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.i("gattCallback", "STATE_CONNECTED");
gatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
mGatt = null;
mBluetoothSingleTonClass.saveGatt(mGatt);
deviceDisconnected();
Log.e("gattCallback", "STATE_DISCONNECTED");
break;
case BluetoothProfile.STATE_CONNECTING :
Log.e("gattCallback", "STATE_CONNECTING");
break;
default:
Log.e("gattCallback", "STATE_OTHER");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
List<BluetoothGattService> services = new ArrayList<>();
services.addAll(gatt.getServices());
Log.d("onServicesDiscovered", "uuid::" + gatt.getServices().get(0).getUuid());
Log.d("onServicesDiscovered", "uuid::" + gatt.getServices().get(1).getUuid());
Log.d("onServicesDiscovered", "uuid::" + gatt.getServices().get(2).getUuid());
Log.d("onServicesDiscovered", "chars::" + gatt.getServices().get(2).getCharacteristics().size());
Log.d("onServicesDiscovered", "chars::" + gatt.getServices().get(0).getCharacteristics().size());
Log.d("onServicesDiscovered", "chars::" + gatt.getServices().get(1).getCharacteristics().size());
}
};
Das Problem ist gatt entdeckt gibt mir alle Dienste das Gerät hat, aber es ist in wenigen mobilen leer Eigenschaften Array geben. Beispiel: gatt.getServices().get(0).getCharacteristics().size()
Dies war in Nexus gut, aber nach wenigen Tagen gibt es mir leere Array, d. H. Größe ist Null. Mache ich etwas falsch? Ist das das Problem mit dem Handy? Alle Referenzlinks wären hilfreich.
Code anhängen –