एंड्रॉइड में स्टेप काउंटर सेंसर सपोर्ट जांचें
यह ट्यूटोरियल दिखाता है कि Sensor.TYPE_STEP_COUNTER का उपयोग करके कैसे जांचा जाए कि डिवाइस में हार्डवेयर स्टेप काउंटर सेंसर है या नहीं।
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं (API 19+ अनुशंसित)।
चरण 2: लेआउट (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/sensorStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textStyle="bold"
android:layout_marginTop="30dp"
android:padding="24dp"
android:background="#E8F5E9"
android:text="जांच हो रही है..."/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.stepcountercheck;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView sensorStatus;
private SensorManager sensorManager;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorStatus = findViewById(R.id.sensorStatus);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
checkStepCounterSupport();
}
private void checkStepCounterSupport() {
// API 19 (KitKat) में जोड़ा गया
Sensor stepCounterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if (stepCounterSensor != null) {
sensorStatus.setText("✓ स्टेप काउंटर सेंसर सपोर्ट करता है");
sensorStatus.setTextColor(0xFF4CAF50);
String info = String.format(
"सेंसर: %s\nवेंडर: %s\nवर्जन: %d\nरेंज: %.0f कदम\nरिजॉल्यूशन: %.1f\nपावर: %.3f mA\nन्यूनतम डिले: %d µs\nरिपोर्टिंग मोड: %s",
stepCounterSensor.getName(),
stepCounterSensor.getVendor(),
stepCounterSensor.getVersion(),
stepCounterSensor.getMaximumRange(),
stepCounterSensor.getResolution(),
stepCounterSensor.getPower(),
stepCounterSensor.getMinDelay(),
getReportingModeName(stepCounterSensor.getReportingMode())
);
sensorStatus.append("\n\n" + info);
} else {
sensorStatus.setText("✗ स्टेप काउंटर सेंसर सपोर्ट नहीं करता");
sensorStatus.setTextColor(0xFFF44336);
sensorStatus.append("\n\nनोट: यह हार्डवेयर सेंसर है।\nअधिकांश आधुनिक फोन (2014+) में होता है।\nसॉफ्टवेयर-आधारित स्टेप डिटेक्शन के लिए\nTYPE_STEP_DETECTOR उपयोग करें।");
}
}
private String getReportingModeName(int mode) {
switch (mode) {
case Sensor.REPORTING_MODE_CONTINUOUS: return "CONTINUOUS";
case Sensor.REPORTING_MODE_ON_CHANGE: return "ON_CHANGE";
case Sensor.REPORTING_MODE_ONE_SHOT: return "ONE_SHOT";
case Sensor.REPORTING_MODE_SPECIAL_TRIGGER: return "SPECIAL_TRIGGER";
default: return "UNKNOWN";
}
}
}
स्टेप काउंटर vs स्टेप डिटेक्टर
| सेंसर | TYPE_STEP_COUNTER | TYPE_STEP_DETECTOR |
|---|---|---|
| प्रकार | हार्डवेयर (लो-पावर, ऑलवेज-ऑन) | सॉफ्टवेयर/हार्डवेयर |
| आउटपुट | कुल कदमों की गिनती (बूट के बाद से) | प्रत्येक कदम का इवेंट (टाइमस्टैम्प के साथ) |
| पावर | बहुत कम (को-प्रोसेसर पर चलता है) | थोड़ा अधिक |
| उपयोग | दैनिक कदम लक्ष्य, गतिविधि ट्रैकिंग | रियल-टाइम कदम इवेंट्स, गेमिंग |
| उपलब्धता | API 19+ | API 19+ |
स्टेप काउंटर डेटा पढ़ना
SensorEventListener stepListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// event.values[0] = बूट के बाद से कुल कदम (फ्लोट लेकिन पूर्णांक मान)
int totalSteps = (int) event.values[0];
// पिछले मान से अंतर लेकर सत्र के कदम प्राप्त करें
// या SharedPreferences में प्रारंभिक मान स्टोर करें
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
// रजिस्टर करें - ON_CHANGE मोड (कदम होने पर ही कॉलबैक)
sensorManager.registerListener(stepListener,
sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
SensorManager.SENSOR_DELAY_NORMAL);
Google Fit API (अनुशंसित विकल्प)
हार्डवेयर सेंसर न होने पर या क्रॉस-डिवाइस सिंक के लिए:
// निर्भरता: implementation 'com.google.android.gms:play-services-fitness:21.0.0'
// दैनिक कदम क्वेरी करें
Fitness.getHistoryClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
.readDailyTotal(DataType.TYPE_STEP_COUNT_DELTA)
.addOnSuccessListener(dataSet -> {
long totalSteps = dataSet.isEmpty() ? 0 : dataSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
});
चरण 4: टेस्ट करें
- वास्तविक डिवाइस पर चलाएं
- अधिकांश 2014+ फोन सपोर्ट करते हैं
- कुछ बजट डिवाइसेज में हार्डवेयर स्टेप काउंटर नहीं होता
