简体   繁体   English

Android 计步器不起作用,未出现在 SensorManager 中

[英]Android Step Counter not working, not appearing in SensorManager

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.我正在尝试在 Android 中制作一个简单的计步器,我目前正在使用 Oreo 并使用 Pixel 2 API 29 进行模拟。问题是它根本不起作用,当我调用 sensorManager 时,没有为 STEP_COUNTER 或 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我的活动 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"/>
...

And a screenshot picturing the problem on debugger以及描绘调试器问题的屏幕截图在此处输入图片说明

The problem is that the emulator does not support the STEP_COUNTER or STEP_DETECTOR.问题是模拟器不支持 STEP_COUNTER 或 STEP_DETECTOR。 You will need to test this feature on a real device that has hardware support for those two sensors.您需要在为这两个传感器提供硬件支持的真实设备上测试此功能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM