カスタム Bluetooth Low Energy デバイスと連携する C# Windows ストア アプリがあります。デバイスを列挙して接続し、検証キーを正常に送信して、デバイスの加速度計の特性を取得できました。しかし、X 軸特性の特性を取得しようとすると、サービスの GetCharacteristics() 列挙子が空のリストを返します。X 軸特性の UUID がパッケージ マニフェストで宣言されていることは間違いありません。デバイスのフォーラムを読んだので、Android ユーザーがアクセスできることがわかりました。でも、なぜかできない。
誰かがこの問題に遭遇し、それを修正する方法を知っていますか?
これが私のマニフェスト宣言です:
<!-- V.BTTN Accelerometer configuration characteristic -->
<m2:Function Type="serviceId:fffffff2-00f7-4000-b000-000000000000" />
<!-- V.BTTN Accelerometer X-Axis notification characteristic -->
<m2:Function Type="serviceId:ffffffA3-00f7-4000-b000-000000000000" />
<!-- V.BTTN Accelerometer Y-Axis notification characteristic -->
<m2:Function Type="serviceId:ffffffA4-00f7-4000-b000-000000000000" />
<!-- V.BTTN Accelerometer Z-Axis notification characteristic -->
<m2:Function Type="serviceId:ffffffA5-00f7-4000-b000-000000000000" />
これは、メインの加速度計構成特性にアクセスし、X 軸特性を取得しようとするコードです。
// <!-- V.BTTN Accelerometer X-Axis notification characteristic -->
public static Guid vbttnAccelerometerXAxisNotify_uuid = new Guid("ffffffA3-00f7-4000-b000-000000000000");
// <!-- V.BTTN Accelerometer Y-Axis notification characteristic -->
public static Guid vbttnAccelerometerYAxisNotify_uuid = new Guid("ffffffA4-00f7-4000-b000-000000000000");
// <!-- V.BTTN Accelerometer Z-Axis notification characteristic -->
public static Guid vbttnAccelerometerZAxisNotify_uuid = new Guid("ffffffA5-00f7-4000-b000-000000000000");
private GattCharacteristic GetCharacteristicByIdAndNdx(Guid characteristicUuid, int ndx = 0)
{
if (characteristicUuid == Guid.Empty)
throw new ArgumentNullException("The characteristic ID is empty.");
if (ndx < 0)
throw new ArgumentOutOfRangeException("The characteristic is negative.");
// Obtain the accelerometer configuration characteristic.
IReadOnlyList<GattCharacteristic> iroCharacteristics =
VAlertService.Instance.Service.GetCharacteristics(characteristicUuid);
if (iroCharacteristics.Count < 1)
throw new InvalidOperationException("Unable to find the V.ALRT characteristic with the given UUID and index.");
if (ndx >= iroCharacteristics.Count)
throw new InvalidOperationException("Found the desired V.ALRT characteristic but the index is out of range.");
return iroCharacteristics[ndx];
}
// < snip >
// Obtain the accelerometer configuration characteristic.
this._accelerometerConfigCharacteristic = GetCharacteristicByIdAndNdx(vbttnAccelerometerConfigCharacteristic_uuid);
// Enable the accelerometer.
if (!(await this.SetAccelerometerMode(true)))
throw new InvalidOperationException("Unable to enable the V.ALRT accelerometer characteristic.");
GattCharacteristic this._accelerometerXAxisCharacteristic = GetCharacteristicByIdAndNdx(vbttnAccelerometerXAxisNotify_uuid);
GattCharacteristic this._accelerometerYAxisCharacteristic = GetCharacteristicByIdAndNdx(vbttnAccelerometerYAxisNotify_uuid);
GattCharacteristic this._accelerometerZAxisCharacteristic = GetCharacteristicByIdAndNdx(vbttnAccelerometerZAxisNotify_uuid);