কাঁচা সেন্সর ডেটা অ্যাক্সেস করুন

সেন্সর API আপনাকে রিয়েল টাইমে আপনার অ্যাপের কাঁচা সেন্সর ডেটা পড়তে দেয়। নিম্নলিখিত কাজ করতে এই API ব্যবহার করুন:

  • ডিভাইসে এবং সহযোগী ডিভাইসে উপলব্ধ ডেটা উত্সগুলি তালিকাভুক্ত করুন৷
  • কাঁচা সেন্সর ডেটা পেতে শ্রোতাদের নিবন্ধন করুন।
  • শ্রোতাদের নিবন্ধনমুক্ত করুন যাতে তারা আর কাঁচা সেন্সর ডেটা না পায়।

উপলব্ধ তথ্য উত্স তালিকা

ডিভাইসে এবং সহযোগী ডিভাইসে উপলব্ধ সমস্ত ডেটা উত্সের একটি তালিকা পেতে, SensorsClient.findDataSources পদ্ধতিটি ব্যবহার করুন:

কোটলিন

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 পদ্ধতিটি ব্যবহার করুন:

কোটলিন

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 পদ্ধতি ব্যবহার করুন:

কোটলিন

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

জাভা

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