STEP_COUNTER 和 STEP_DETECTOR 适用于 SDK 28,但不适用于 SDK 29?

STEP_COUNTER and STEP_DETECTOR works with SDK 28, but not SDK 29?

我做了一项服务,可以定期广播来自 STEP_COUNTER 和 STEP_DETECTOR 传感器的计步数。在一个应用程序中,我让它完美地工作,但在将完全相同的代码复制到另一个项目后它停止工作了。经过几个小时的调试,我想出了解决办法。当我将 build.gradle 中的 compileSdkVersion 更改为 28 时,它工作正常,但将其更改为 29 会使它停止工作。这是为什么?

根据 Privacy changes in Android 10(适用于 targetSdkVersion 为 29 或更高的应用):

Android 10 introduces the android.permission.ACTIVITY_RECOGNITION runtime permission for apps that need to detect the user's step count or classify the user's physical activity, such as walking, biking, or moving in a vehicle. This is designed to give users visibility of how device sensor data is used in Settings.

The only built-in sensors on the device that require you to declare this permission are the step counter and step detector sensors.

因此你必须:

  1. android.permission.ACTIVITY_RECOGNITION 添加到您应用的清单中。

  2. 在运行时请求权限并让用户授予该权限。