im trying to make a simple step counter in Android, im currently using Oreo and emulating with Pixel 2 API 29. The problem is that its simply not working, when i call the sensorManager there is no sensor listed neither for STEP_COUNTER or STEP_DETECTOR. I followed different tutorials step by step and didnt work. Does anyone know what could be the problem? Here is my code and manifest, and the list im talking about,
My activity StepsActivity.java
public class StepsActivity extends AppCompatActivity implements SensorEventListener {
SensorManager sm;
Sensor sensor;
TextView tv_steps_count;
int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_steps);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
//ask for permission
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION},Sensor.TYPE_STEP_COUNTER);
}
tv_steps_count = (TextView) findViewById(R.id.tv_steps_count);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
if(sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)!=null){
sensor = (Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
}else if(sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)!=null){
sensor =(Sensor) sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
}
findViewById(R.id.backBTN).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
tv_steps_count.setText(""+sensorEvent.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
public void onPause() {
stop();
super.onPause();
}
@Override
public void onResume() {
start();
super.onResume();
}
private void start() {
sm.registerListener(this, sensor, sm.SENSOR_DELAY_FASTEST);
}
private void stop() {
sm.unregisterListener(this);
}
}
My manifest (just the parts of it which that have to do with this)
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature
android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature
android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
...
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-feature android:name="android.hardware.sensor.stepcounter"
android:required="true"/>
<uses-feature android:name="android.hardware.sensor.stepdetector"
android:required="true"/>
...
The problem is that the emulator does not support the STEP_COUNTER or STEP_DETECTOR. You will need to test this feature on a real device that has hardware support for those two sensors.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.