首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手机找不到Sensor.TYPE_LINEAR_ACCELERATION的传感器

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

Stack Overflow用户
提问于 2013-03-19 14:55:01
回答 1查看 1.5K关注 0票数 1

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

我执行这些调用:

代码语言:javascript
复制
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mLinearAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);

在上述操作之后,定义了mAccelerometer,但mLinearAcceleration为null。我知道TYPE_LINEAR_ACCELERATION直到API9级才被添加,但我认为我至少在API9级中运行。

代码语言:javascript
复制
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17" />

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

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

当我打电话给..。

代码语言:javascript
复制
List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor s : l)
    System.out.println(s.getName());

我得到了

代码语言:javascript
复制
Goldfish 3-axis Accelerometer
Goldfish 3-axis Magnetic field sensor
Goldfish Orientation sensor
Goldfish Temperature sensor
Goldfish Proximity sensor

这些都不是线性加速度,其中一个是方向,一个不推荐使用的传感器。看起来我的传感器好像是在API级别9之前运行的,但我不知道为什么会这样。我的项目中是否有一些字段可能会迫使应用程序充当较旧的API?(除了AndroidManifest.xml文件中的最小支持接口字段,该字段已经设置为9)

EN

回答 1

Stack Overflow用户

发布于 2013-03-19 14:57:25

把这个放到你的货单上

代码语言:javascript
复制
<uses-permission android:name=”android.permission.SET_ORIENTATION” />

是为了访问你的加速度计

试试这个:

代码语言:javascript
复制
     /* 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();
  }

还有这个:

代码语言:javascript
复制
 /* 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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15493273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档