如何从Smart手表获取Google Fit数据可穿戴设备Fossil Q创始人?哪个符合BLE要求?在Android中

时间:2016-08-19 06:14:32

标签: android bluetooth-lowenergy android-sensors google-fit google-fit-sdk

我正试图通过Google Fit Android SDK从英特尔基于Fossil Android的智能手表(BLE设备)中提取数据。 BLE扫描似乎发生了,配对发生但结果内部回调它没有进入onDeviceFound(如果它到达我可以从那里继续)。它最终会在扫描开始后的几秒钟内超时。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢您提供的文档链接。我确实彻底地完成了所有这些,但没有帮助。这是我的Class文件,我可以从我的MainActivity调用startBleScan,BleScan似乎正在工作,但之后它不会继续使用onDeviceFound方法。

公共类BlueToothDevicesManager {

private static final String TAG = "BlueToothDevicesManager";
private static final int REQUEST_BLUETOOTH = 1001;
private Main2Activity mMonitor;
private GoogleApiClient mClient;

public BlueToothDevicesManager(Main2Activity monitor, GoogleApiClient client) {
    mMonitor = monitor;
    mClient = client;

}

public void startBleScan() {
    if (mClient.isConnected()) {
        Log.i(TAG, "Google account is connected");
    }
    BleScanCallback callback = new BleScanCallback() {
        @Override
        public void onDeviceFound(BleDevice device) {
            Log.i(TAG, "BLE Device Found: " + device.getName());
            claimDevice(device);
        }

        @Override
        public void onScanStopped() {

            Log.i(TAG, "BLE scan stopped");
        }
    };


    PendingResult result = Fitness.BleApi.startBleScan(mClient, new StartBleScanRequest.Builder()
            .setDataTypes(DataType.TYPE_POWER_SAMPLE, DataType.TYPE_STEP_COUNT_CADENCE, DataType.TYPE_STEP_COUNT_DELTA, DataType.TYPE_SPEED, DataType.TYPE_ACTIVITY_SAMPLE, DataType.TYPE_DISTANCE_DELTA, DataType.TYPE_ACTIVITY_SEGMENT, DataType.TYPE_LOCATION_SAMPLE)
            .setBleScanCallback(callback)
            .build());

    result.setResultCallback(new ResultCallback() {
        @Override
        public void onResult(@NonNull Result result) {
            Status status = result.getStatus();
            if (!status.isSuccess()) {
                String a = status.getStatusCode() + "";
                Log.i(TAG, a);
                switch (status.getStatusCode()) {

                    case FitnessStatusCodes.DISABLED_BLUETOOTH:
                        try {

                            status.startResolutionForResult(mMonitor, REQUEST_BLUETOOTH);

                        } catch (SendIntentException e) {
                            Log.i(TAG, "SendIntentException: " + e.getMessage());
                        }
                        break;
                }
                Log.i(TAG, "BLE scan unsuccessful");
            } else {
                Log.i(TAG, "ble scan status message: " + status.getStatusMessage());
                Log.i(TAG, "Ble scan successful: " + status.getResolution());


            }
        }
    });
}

public void claimDevice(BleDevice device) {
    //Stop ble scan

    //Claim device
    PendingResult<Status> pendingResult = Fitness.BleApi.claimBleDevice(mClient, device);
    pendingResult.setResultCallback(new ResultCallback<Status>() {

        @Override
        public void onResult(@NonNull Status st) {
            if (st.isSuccess()) {
                Log.i(TAG, "Claimed device successfully");
            } else {
                Log.e(TAG, "Did not successfully claim device");
            }
        }
    });
}

}