我想使用我的Android应用程序实时从我的mi band 2请求传感器数据。我对此有些困难。我使用权限BLUETOOTH
和BLUETOOTH_ADMIN
。我检查了是否可以通过Bluetooth le默认API看到我的设备。
我尝试使用此示例https://developers.google.com/fit/android/ble-sensors?hl=ru,并且每次我都处于onScanStopped状态且此回调没有任何解释时,所以我不明白为什么它会失败。
我的代码:
GoogleApiClient client = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addScope(new Scope(Scopes.FITNESS_BODY_READ))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
client.connect();
在onConnected上,我有:
Fitness.getBleClient(this, GoogleSignIn.getLastSignedInAccount(this))
.startBleScan(Arrays.asList(DataType.TYPE_ACTIVITY_SEGMENT), 60, bleScanCallbacks)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d("TAG_F", "onComplete: " + task.isSuccessful());
}
});
这里我也尝试了所有这些数据类型DataType.TYPE_STEP_COUNT_DELTA, DataType.TYPE_HEART_RATE_BPM
这表明我的扫描成功。但是在60秒后的回调中,我得到onScanStopped
:
private BleScanCallback bleScanCallbacks = new BleScanCallback() {
@Override
public void onDeviceFound(BleDevice bleDevice) {
Log.d("TAG_F", "onDeviceFound: " + bleDevice.getDataTypes());
}
@Override
public void onScanStopped() {
Log.d("TAG_F", "onScanStopped: ");
}
};
答案 0 :(得分:2)
onScanStopped()
在
startBleScan(List<DataType> dataTypes, int timeoutSecs, BleScanCallback callback)
已过期。
尝试增加/减少方法中指定的时间(60'):
Fitness.getBleClient(this, GoogleSignIn.getLastSignedInAccount(this))
.startBleScan(Arrays.asList(DataType.TYPE_ACTIVITY_SEGMENT), 60, bleScanCallbacks)