Я работаю над приложением, в котором я хочу прочитать количество шагов пользователя, а также другую информацию, связанную с фитнесом, такую как частота сердечных сокращений (при подключении к смарт-диапазону), с обоих мобильных датчиков, а также с любых других фитнес-устройств, поддерживаемых Google Fit.SDK.
Я пытаюсь использовать Google Fit SDK для Android и пытаюсь получить доступ к данным через Sensor API, но каждый раз, когда код выполняется, я получаю сообщение об ошибке: «SIGN IN REQUIRED». Я не хочу, чтобы пользователь входил в определенную учетную запись Google. У меня есть собственная система входа в систему. Я также не хочу хранить данные в фитнес-магазине, так как у меня есть собственный бэкэнд. Все, что мне нужно, - это получить доступ к данным с датчиков.
Вотфиктивный код, который я пробовал:
private GoogleApiClient googleApiClient;
private static final int REQUEST_OAUTH = 1001;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
return true;
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
return true;
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
googleApiClient.connect();
PendingResult<Status> pendingResult = Fitness.SensorsApi.add(
googleApiClient,
new SensorRequest.Builder()
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setSamplingRate(1, TimeUnit.MINUTES) // sample once per minute
.build(),
new OnDataPointListener() {
@Override
public void onDataPoint(DataPoint dataPoint) {
Log.e("Data Point", dataPoint.toString());
}
});
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == REQUEST_OAUTH && resultCode == RESULT_OK) {
googleApiClient.connect();
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
if (connectionResult.getErrorCode() == FitnessStatusCodes.NEEDS_OAUTH_PERMISSIONS) {
try {
connectionResult.startResolutionForResult(this, REQUEST_OAUTH);
} catch (IntentSender.SendIntentException e) {
}
}
}
Можно ли добиться этого с помощью фитнеса SDK без входа в систему и, если нет, то какова другая альтернатива для доступа к этой информации в Android.
Я где-то читал, что могу использовать диспетчер сенсоров, но, думаю, с его помощью мне придется самому выполнять все расчеты, например, удалять ошибочные точки данных, полученные от сенсора из-за внезапного рывка и т. Д., Что, я думаю, уже выполняется fitness-sdk.