내 앱에서 BLE central을 구현했습니다. 단계 :BLE onServicesDiscovered() 특성 배열을 반환하지 않습니다
이 BluetoothManager
mBluetoothManager = (BluetoothManager) mContext.getSystemService (Context.BLUETOOTH_SERVICE)을 얻으십시오;
mBluetoothAdapter = mBluetoothManager.getAdapter(); 장치
스캔
연결 장치
mGatt = bluetoothDevice.connectGatt (이 거짓, gattCallback);
핸들 콜백 및 시작 서비스 검색 장치가 나는 서비스를 발견하는 호출을하고 연결되면
. 서비스가 나는
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());
}
};
문제는 GATT입니다 그것을 잡기하고 발견되면
는gatt.discoverServices();
나에게 장치가 모든 서비스를 제공하지만, 몇 가지 모바일에서 빈 특성 배열을주고있다. 예 : gatt.getServices().get(0).getCharacteristics().size()
Nexus에서 정상적으로 작동했지만 며칠 후 크기가 0 인 빈 배열을 제공합니다. 잘못된 것이 있습니까? 이것이 모바일 문제입니까? 참조 링크가 도움이 될 것입니다.
코드 첨부 –