0

Я пытаюсь вытащить данные из Fossil Android на базе Android Smartwatch (устройство BLE) с помощью Google Fit Android SDK. Кажется, что BLE Scan происходит, происходит спаривание, но внутри результата Callback он не переходит в onDeviceFound (я могу перейти оттуда, если он достигнет). В конце концов он истекает через несколько секунд после начала сканирования.Как получить данные Google Fit от Smart Watch Носимое устройство Fossil Q Основатель? Что соответствует требованиям BLE? В Android

Любая помощь будет оценена по достоинству.

+0

Можете ли вы поделиться своим кодом и ошибок журналы, которые вы сталкиваетесь? Вы можете проверить документ, касающийся [Использовать Bluetooth-датчики] (https://developers.google.com/fit/android/ble-sensors), просмотреть надлежащую реализацию и наилучшие методы управления данными пользователя, см. [Ответственное использование Google Fit] (https://developers.google.com/fit/overview#responsible_use_of_google_fit). Надеюсь, поможет! – KENdi

ответ

0

Спасибо за ссылку документа. Я все это тщательно изучил, но это не помогло. Это мой файл класса, и я могу вызвать startBleScan из моего MainActivity, 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"); 
      } 
     } 
    }); 
} 

}