android - 手机找不到 Sensor.TYPE_LINEAR_ACCELERATION 的传感器

标签 android accelerometer android-sensors

我正在尝试在我的 Android 应用程序上使用线性加速度融合传感器。但是,它找不到 Sensor.TYPE_LINEAR_ACCELERATION 的传感器。

我执行这些调用:

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mLinearAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);

在上面之后,定义了 mAccelerometer,但是 mLinearAcceleration 为空。我知道直到 API 级别 9 才添加 TYPE_LINEAR_ACCELERATION,但我认为我至少在 API 级别 9 中运行。这是我的 list 文件的 fragment :

<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17" />

所以我相信我在正确的 API 级别下工作。

但是,当我尝试列出所有可用的传感器时,我没有找到应适用于此 API 级别的所有传感器。

当我打电话...

List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor s : l)
    System.out.println(s.getName());

我明白了

Goldfish 3-axis Accelerometer
Goldfish 3-axis Magnetic field sensor
Goldfish Orientation sensor
Goldfish Temperature sensor
Goldfish Proximity sensor

这些都不是线性加速度,一个是 Orientation,一种已弃用的传感器。看起来我的传感器运行起来就像它们来自 API 级别 9 之前一样,但我不知道为什么会这样。我的项目中是否有某些字段可能会强制应用程序充当较旧的 API? (AndroidManifest.xml 文件中已设置为 9 的最小支持 API 字段除外)

最佳答案

把它放在你的 list 中

<uses-permission android:name=”android.permission.SET_ORIENTATION” />

用于访问您的加速度计

试试这个:

     /* put this into your activity class */
  private SensorManager mSensorManager;
  private float mAccel; // acceleration apart from gravity
  private float mAccelCurrent; // current acceleration including gravity
  private float mAccelLast; // last acceleration including gravity

  private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
  float x = se.values[0];
  float y = se.values[1];
  float z = se.values[2];
  mAccelLast = mAccelCurrent;
  mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
  float delta = mAccelCurrent - mAccelLast;
  mAccel = mAccel * 0.9f + delta; // perform low-cut filter
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
  };

  @Override
  protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {
    mSensorManager.unregisterListener(mSensorListener);
    super.onPause();
  }

还有这个:

 /* do this in onCreate */
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;

关于android - 手机找不到 Sensor.TYPE_LINEAR_ACCELERATION 的传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493273/

相关文章:

java - Libgdx 加速度计不工作?

android - 旋转设备时磁场测量的奇怪行为

android - URL 验证工作正常但保持连接并限制任何进一步的请求

java - 在 Android 版 Canvas 中撤消和重做

android - 将 ActionBarSherlock 与 Google map API V2 结合使用

android - 磁场、旋转矩阵和全局坐标

java - 无论屏幕方向如何,如何获得正确的方位(磁性方向)?

android - Xamarin android、Xamarin iOS 和 Xamarin 跨平台项目之间的区别

ios - 如何将加速度计g力值转换为度

iphone - 游戏设计 : Checking for object intersection or getting values from accelerometer