0

我試圖通過Google Fit Android SDK從英特爾的基於Fossil Android的Smartwatch(BLE設備)中提取數據。 BLE掃描似乎發生,配對發生,但在結果內部回調它不會去onDeviceFound(如果它到達,我可以從那裏繼續)。它在掃描開始的幾秒鐘內最終會超時。如何從智能手錶獲取Google Fit數據可穿戴設備Fossil Q Founder?哪些符合BLE要求? Android

任何幫助,將不勝感激。

+0

您可以共享你遇到你的代碼和錯誤日誌?您可能想要查看有關[使用藍牙傳感器](https://developers.google.com/fit/android/ble-sensors)的文檔,以查看管理用戶數據時的正確實施和最佳實踐,請參閱[負責使用Google Fit](https://developers.google.com/fit/overview#responsible_use_of_google_fit)。希望能幫助到你! – KENdi

回答

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"); 
      } 
     } 
    }); 
} 

}

相關問題