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"/>
謝謝,工作。 – user1163392
因爲您沒有註冊參加此活動。使用sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);行只能訪問傳感器。之後你必須註冊。這是java中的簡單事件處理。 – tungi52
我知道,但我想我註冊了傳感器getDefaultSensor() – user1163392