원시 센서 데이터 액세스

Sensors API를 사용하면 앱에서 실시간으로 원시 센서 데이터를 읽을 수 있습니다. 사용 이 API를 사용하면 다음 작업을 수행할 수 있습니다.

  • 기기 및 호환 기기에서 사용할 수 있는 데이터 소스를 나열합니다.
  • 원시 센서 데이터를 수신하도록 리스너를 등록합니다.
  • 더 이상 원시 센서 데이터를 수신하지 않도록 리스너를 등록 취소합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.

사용 가능한 데이터 소스 나열

기기 및 호환 기기에서 사용 가능한 모든 데이터 소스의 목록 가져오기 기기에서 SensorsClient.findDataSources 드림 메서드를 사용하여 축소하도록 요청합니다.

Kotlin

private val fitnessOptions = FitnessOptions.builder().addDataType(DataType.TYPE_STEP_COUNT_DELTA).build()

// Note: Fitness.SensorsApi.findDataSources() requires the
// ACCESS_FINE_LOCATION permission.
Fitness.getSensorsClient(requireContext(), GoogleSignIn.getAccountForExtension(requireContext(), fitnessOptions))
    .findDataSources(
        DataSourcesRequest.Builder()
            .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
            .setDataSourceTypes(DataSource.TYPE_RAW)
            .build())
    .addOnSuccessListener { dataSources ->
        dataSources.forEach {
            Log.i(TAG, "Data source found: ${it.streamIdentifier}")
            Log.i(TAG, "Data Source type: ${it.dataType.name}")

            if (it.dataType == DataType.TYPE_STEP_COUNT_DELTA) {
                Log.i(TAG, "Data source for STEP_COUNT_DELTA found!")

                ...
            }
        }
    }
    .addOnFailureListener { e ->
        Log.e(TAG, "Find data sources request failed", e)
    }

자바

FitnessOptions fitnessOptions = FitnessOptions.builder().addDataType(DataType.TYPE_STEP_COUNT_DELTA).build();

// Note: Fitness.SensorsApi.findDataSources() requires the
// ACCESS_FINE_LOCATION permission.
Fitness.getSensorsClient(getApplicationContext(), GoogleSignIn.getAccountForExtension(getApplicationContext(), fitnessOptions))
        .findDataSources(
                new DataSourcesRequest.Builder()
                        .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
                        .setDataSourceTypes(DataSource.TYPE_RAW)
                        .build())
        .addOnSuccessListener(dataSources -> {
            dataSources.forEach(dataSource -> {
                Log.i(TAG, "Data source found: ${it.streamIdentifier}");
                Log.i(TAG, "Data Source type: ${it.dataType.name}");

                if (dataSource.getDataType() == DataType.TYPE_STEP_COUNT_DELTA) {
                    Log.i(TAG, "Data source for STEP_COUNT_DELTA found!");
                    ...
                }
            })})
        .addOnFailureListener(e ->
            Log.e(TAG, "Find data sources request failed", e));

데이터 소스의 기기에 대한 정보를 가져오려면 다음을 사용합니다. DataSource.getDevice 드림 메서드를 사용하여 축소하도록 요청합니다. 기기 정보는 유사한 기기 및 서로 다른 기기의 여러 센서에 대해 센서의 기기 정보를 기기에 따라 데이터를 다르게 처리할 수 있습니다. 예를 들어 웨어러블 기기의 센서 데이터를 읽는 데 관심이 있음 같은 유형의 센서에서 오는 것은 아닙니다.

Device를 사용하려면 다음 단계를 따르세요. 예를 들어 활동을 실행하는 기기의 경우 Device.getLocalDevice 메서드를 사용하여 축소하도록 요청합니다. 이는 데이터 소스가 앱이 실행되는 기기와 동일한 기기를 사용합니다

리스너 추가

특정 피트니스 데이터 유형의 원시 데이터를 수신하거나 특정 데이터 소스를 찾으려면 SensorsClient.add 드림 메서드를 사용하여 축소하도록 요청합니다.

Kotlin

val listener = OnDataPointListener { dataPoint ->
        for (field in dataPoint.dataType.fields) {
            val value = dataPoint.getValue(field)
            Log.i(TAG, "Detected DataPoint field: ${field.name}")
            Log.i(TAG, "Detected DataPoint value: $value")
        }
    }

Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
    .add(
        SensorRequest.Builder()
            .setDataSource(dataSource) // Optional but recommended for custom
            // data sets.
            .setDataType(dataType) // Can't be omitted.
            .setSamplingRate(10, TimeUnit.SECONDS)
            .build(),
        listener
    )
    .addOnSuccessListener {
    	Log.i(TAG, "Listener registered!")
    }
    .addOnFailureListener {
    	Log.e(TAG, "Listener not registered.", task.exception)
    }

자바

OnDataPointListener listener = dataPoint -> {
    for (Field field : dataPoint.getDataType().getFields()) {
        Value value = dataPoint.getValue(field);
        Log.i(TAG, "Detected DataPoint field: ${field.getName()}");
        Log.i(TAG, "Detected DataPoint value: $value");
    }
};
Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
        .add(
                new SensorRequest.Builder()
                        .setDataSource(dataSource) // Optional but recommended
                        // for custom data sets.
                        .setDataType(dataType) // Can't be omitted.
                        .setSamplingRate(10, TimeUnit.SECONDS)
                        .build(),
                listener
        )
        .addOnSuccessListener(unused ->
                Log.i(TAG, "Listener registered!"))
        .addOnFailureListener(task ->
    Log.e(TAG, "Listener not registered.", task.getCause()));
}

리스너 삭제

원시 데이터 업데이트에서 리스너를 제거하려면 SensorsClient.remove 드림 메서드를 사용하여 축소하도록 요청합니다.

Kotlin

Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
    .remove(listener)
    .addOnSuccessListener {
    	Log.i(TAG, "Listener was removed!")
    }
    .addOnFailureListener {
    	Log.i(TAG, "Listener was not removed.")
    }

Java

Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
        .remove(listener)
        .addOnSuccessListener(unused ->
                Log.i(TAG, "Listener was removed!"))
        .addOnFailureListener(e ->
                Log.i(TAG, "Listener was not removed."));