2013-03-19 69 views
1

我正嘗試在我的android應用上使用線性加速度融合傳感器。但是,它無法找到Sensor.TYPE_LINEAR_ACCELERATION的傳感器。手機無法找到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爲空。我知道不加入TYPE_LINEAR_ACCELERATION直到API 9級,但是我想我至少在API層面9.以下運行是我的清單文件的一個片段:

<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 

這些都不是直線加速,一個是方向,不推薦使用的傳感器。看起來我的傳感器像API級別9之前一樣運行,但我不知道這是爲什麼。我的項目中是否存在可能迫使應用程序充當舊API的字段? (比在AndroidManifest.xml文件支持的最低API場,這已經是設置爲9等)

+1

那麼你的手機沒有實現傳感器TYPE_LINEAR_ACCELERATION – 2013-03-19 06:59:20

回答

1

把這個在您的清單

<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; 
+1

這只是一個解決方法,使用加速計來隔離引力? 我可以試試看,但我擔心的是,當用戶移動手機時,重力和手上的力會相互干擾。我試圖從他們手中衡量力量。 但我會嘗試這種方法。有沒有辦法讓它識別Sensor.TYPE_LINEAR_ACCELERATION融合傳感器? – 2013-03-19 16:57:04

相關問題