【问题标题】:Sensor.TYPE_STEP_DETECTOR not found on android Lollipop在 android Lollipop 上找不到 Sensor.TYPE_STEP_DETECTOR
【发布时间】:2015-06-17 12:32:16
【问题描述】:

我正在开发一个计步器 android 应用程序,为此我使用了 Sensor.TYPE_STEP_DETECTOR,它可从 android KitKat 获得。 在 Nexus 5 和 Samsung Alpha 上一切正常,但后来我在 Moto G(Lollipop) 和 Nexus 4(Lollipop) 上测试了我的应用程序, 当我尝试获取 Sensor.TYPE_STEP_DETECTOR 类型的传感器时,两个设备都返回 null。

这是我的代码:

 private boolean checkSensorAvailability() {
    SensorManager sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
    if(sensor==null){return false;}

    return true;
}

据我所知,该传感器需要设备中的加速度计。 两种设备都可以使用。

请帮我解决这个问题。

谢谢

【问题讨论】:

  • 你的设备是什么?
  • 我正在使用 Nexus 5、nexus 4、三星 Galaxy Alpha、Moto G。

标签: android android-sensors


【解决方案1】:

一些设备直接拒绝了该(完全唤醒)功能。

问题是功耗。如果手机在每出现一个步骤时都会唤醒应用处理器,则会消耗更多电量并可能导致电池寿命变短。对于您的手机,制造商已决定不支持传感器的“唤醒”版本,该版本会在检测到脚步时打开手机。

https://stackoverflow.com/a/28071354/603270

作为一种解决方法,我建议查看https://github.com/j4velin/Pedometer/blob/master/src/main/java/de/j4velin/pedometer/SensorListener.java

public void onSensorChanged(final SensorEvent event) {
    steps = (int) event.values[0];
    // ...
}

【讨论】:

  • 那么如何解决这个问题呢?我应该使用 TYPE_ACCELEROMETER 类型吗?
  • 查看屏幕关闭时是否调用onSensorChanged() 以及(int) event.values[0] 是否是有效的步数:github.com/j4velin/Pedometer/blob/master/src/main/java/de/…(我没有尝试过此代码,但这是我知道的唯一解决方法)。
  • @shkscheider 感谢您的关注,但是当我尝试获取传感器时,我的问题就开始了MICROSECONDS_IN_ONE_MINUTE);所以这个人正在使用 sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER) 来获取传感器,而我正在获取 null
【解决方案2】:

并非所有设备都支持步数传感器:

来自文档:

两个步进传感器都依赖于硬件(Nexus 5 是第一个设备 支持他们),所以你应该检查可用性 hasSystemFeature(),使用 FEATURE_SENSOR_STEP_DETECTOR 和 FEATURE_SENSOR_STEP_COUNTER 常量。

在这里找到: https://developer.android.com/about/versions/android-4.4.html

【讨论】:

    【解决方案3】:

    正如 Android 文档 (https://developer.android.com/about/versions/android-4.4.html) 所述:

    两个步进传感器都依赖于硬件(Nexus 5 是第一个支持它们的设备),因此您应该使用 FEATURE_SENSOR_STEP_DETECTOR 和 FEATURE_SENSOR_STEP_COUNTER 常量检查 hasSystemFeature() 的可用性。

    因此 Nexus 4 和 Moto G2 不支持它。您应该检查其他设备。

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2014-12-25
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多