私は自分のアプリでBLE centralを実装しました。 手順:BLE onServicesDiscovered()特性を返さない配列
はBluetoothManager
mBluetoothManager =(BluetoothManager)mContext.getSystemService(Context.BLUETOOTH_SERVICE)を取得します。
mBluetoothAdapter = mBluetoothManager.getAdapter();デバイス用
スキャン
接続デバイス
mGatt = bluetoothDevice.connectGatt(この偽、gattCallback)。
ハンドルコールバックおよびデバイスは、私はサービスを発見するためにコールを作っています接続されると、サービス発見
を開始します。
gatt.discoverServices();
サービスが発見されたら、私は
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.getServices().get(0).getCharacteristics().size()
これはNexusでうまくいきましたが、数日後に空の配列、つまりサイズがゼロになりました。 何か間違っていますか?これは携帯電話の問題ですか?参照リンクは参考になります。
コードを添付してください –