我正在编写一个指南针应用程序,但由于某种原因无法访问所需的传感器。
我已经实现了 SensorEventListener
接口(interface)并以这种方式注册我的传感器:
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()
方法,那就太好了。 list 中的权限:
<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"/>
最佳答案
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
关于android - 无法访问 Android 中的传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8970065/