中心的な役割を果たす Android アプリでは、BLE 周辺機器のorg.bluetooth.service.location_and_navigationサービスのorg.bluetooth.characteristic.location_and_speed特性に格納されている緯度と経度をどのように取得しますか?
私は次のJavaコードを試しています -
private float mLatitude;
private float mLongitude;
private static final UUID LOCATION_AND_NAVIGATION =
UUID.fromString("00001819-0000-1000-8000-00805f9b34fb");
private static final UUID LOCATION_AND_SPEED =
UUID.fromString("00002a67-0000-1000-8000-00805f9b34fb");
private BluetoothAdapter mBluetoothAdapter;
private BluetoothGatt mBluetoothGatt;
private BluetoothGattService mVehicleInfoService;
private BluetoothGattCharacteristic mLocationAndSpeedChar;
デバイス接続で呼び出されるコールバックは次のとおりです。
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt,
int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED)
gatt.discoverServices();
}
サービスが検出されたら、サービスと特性オブジェクトを作成しようとします (そして、それらがnull
デバッガーにないことを確認します)。
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
mVehicleInfoService =
mBluetoothGatt.getService(LOCATION_AND_NAVIGATION);
mLocationAndSpeedChar =
mVehicleInfoService.getCharacteristic(LOCATION_AND_SPEED);
if (mLocationAndSpeedChar != null)
mBluetoothGatt.readCharacteristic(mLocationAndSpeedChar);
}
以下は、特性値の読み取り時に呼び出されるコールバックです。
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic ch, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
mLatitude = ch.getIntValue(
BluetoothGattCharacteristic.FORMAT_SINT32,
WHICH_OFFSET_TO_USE_FOR_LAT);
mLongitude = ch.getIntValue(
BluetoothGattCharacteristic.FORMAT_SINT32,
WHICH_OFFSET_TO_USE_FOR_LNG);
}
}
};
2 つの質問をしてください:
- 上記のgetIntValueメソッドにどのオフセットパラメータを渡す必要がありますか?
- Google Maps Locationで必要な整数を double に変換する方法は?