रॉ सेंसर डेटा ऐक्सेस करें

सेंसर एपीआई की मदद से, आप अपने ऐप्लिकेशन में मौजूद रॉ सेंसर डेटा को रीयल टाइम में पढ़ सकते हैं. इस एपीआई का इस्तेमाल करके ये काम करें:

  • डिवाइस और कंपैनियन डिवाइसों पर उपलब्ध डेटा सोर्स की सूची बनाएं.
  • रॉ सेंसर डेटा पाने के लिए, लिसनर को रजिस्टर करें.
  • सुनने वालों का रजिस्ट्रेशन रद्द करें, ताकि उन्हें रॉ सेंसर डेटा न मिले.

उपलब्ध डेटा सोर्स की सूची बनाना

डिवाइस और साथी डिवाइसों पर उपलब्ध सभी डेटा सोर्स की सूची पाने के लिए, 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)
    }

Java

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

Java

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