Android获取不到运动步数(踩坑)

Android获取不到运动步数(踩坑)

获取运动步数

使用SensorManager,也就是手机内置的传感器获取运动步数,通过该方法可获取到当前运动步数、开机后总运动步数、时间戳等数据

	private SensorManager mSensorManager;
    private MySensorEventListener mListener;

	mListener = new MySensorEventListener();

	mSensorManager.registerListener(mListener,
		mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR),
        SensorManager.SENSOR_DELAY_NORMAL);
                
    mSensorManager.registerListener(mListener,
        mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
        SensorManager.SENSOR_DELAY_NORMAL);

上面代码分别获取两组数据,Sensor.TYPE_STEP_DETECTOR、Sensor.TYPE_STEP_COUNTER

Sensor.TYPE_STEP_DETECTOR:当前正在运动时返回1
Sensor.TYPE_STEP_COUNTER:返回开机以来当天总步数

class MySensorEventListener implements SensorEventListener {
    
    
        @Override
        public void onSensorChanged(SensorEvent event) {
    
    
            System.out.println("step@@@:" + event.sensor.getType() + "--" + Sensor.TYPE_STEP_DETECTOR + "--" + Sensor.TYPE_STEP_COUNTER);
            if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
    
    
                if (event.values[0] == 1.0f) {
    
    
                    mStepDetector++;
                }
            } else if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
    
    
                mStepCounter = (int) event.values[0];
            }

            String desc = String.format("设备检测到您当前走了%d步,自开机以来总数为%d步", mStepDetector, mStepCounter);
            mStepTV.setText(desc);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
    
            Log.d("onAccuracyChanged", String.valueOf(accuracy));
        }
    }

结果数据通过mListener回调处理

需要特别注意:当手机关机重启后,运动步数会清零重置,如需准确获取当天的运动步数需做持久化处理

某些手机获取不到步数

在使用SensorManager获取步数时发现部分手机可以获取到步数,一部分手机获取不到

是因为Android10以后需要动态获取Manifest.permission.ACTIVITY_RECOGNITION权限才能正常回调步数

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
    
    
            if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED){
    
    
                ActivityCompat.requestPermissions(this, new String[]{
    
    Manifest.permission.ACTIVITY_RECOGNITION}, 1);
            } else {
    
    
                Toast toast = Toast.makeText(this, "已授权", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            }
        }

猜你喜欢

转载自blog.csdn.net/weixin_41046681/article/details/115934606