2012-01-23 58 views
3

我正在寫一個指南針應用程序,但由於某種原因無法訪問所需的傳感器。 我已經實現了SensorEventListener接口和寄存器我的傳感器是這樣的:無法訪問Android中的傳感器

sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

在我onSensorChange()方法:

public void onSensorChanged(SensorEvent event) { 
    Toast t = Toast.makeText(this, "onSensorChanged", Toast.LENGTH_LONG); 
    t.setGravity(Gravity.TOP, 0, 0); 
    t.show(); 
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
     mGravity = event.values; 
    } 
    if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){ 
     mGeomagnetic = event.values; 
    } 

    if(mGravity !=null && mGeomagnetic !=null){ 
     float [] R = new float[9]; 
     float [] I = new float [9]; 
     boolean success = sensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic); 
     if(success){ 
      float [] orientation = new float [3]; 
       sensorManager.getOrientation(R, orientation); 
      north = orientation[0]; 
     } 
    } 
} 

Toast消息將不會顯示在屏幕上,當我嘗試把北值在TextView輸出是0。如果有人能向我解釋爲什麼我不能訪問onSensorChanged()方法,那將會很棒。權限清單:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

回答

11
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL); 

不要忘記註銷它們。

更多:http://developer.android.com/reference/android/hardware/SensorManager.html

+0

謝謝,工作。 – user1163392

+0

因爲您沒有註冊參加此活動。使用sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);行只能訪問傳感器。之後你必須註冊。這是java中的簡單事件處理。 – tungi52

+0

我知道,但我想我註冊了傳感器getDefaultSensor() – user1163392