android - 使用加速度计和磁场传感器寻找朝拜方向的逻辑
问题描述
我正在尝试实现寻找朝拜方向的逻辑。
我从这里Sensor.TYPE_ORIENTATION
使用并复制了代码
mSensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
但我发现它已被弃用,相反,我从这里Sensor.TYPE_ORIENTATION
使用了加速度计和磁场传感器
这是我现在的代码
private void registerSensor() {
mySensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetometer = mySensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mySensorManager.registerListener(mySensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_UI);
mySensorManager.registerListener(mySensorEventListener, magnetometer, SensorManager.SENSOR_DELAY_UI);
}
private SensorEventListener mySensorEventListener = new SensorEventListener() {
float degree;
float head;
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (lastKnownLocation == null || image == null || arrow == null) {
return;
}
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);
degree = orientation[2]; // orientation contains: azimut, pitch and roll
head = orientation[0];
}
}
我正在努力获得学位和头衔。我在这里做错了什么?
解决方案
推荐阅读
- python - 格式化 Windows 命令行调用以从 Python 执行 R 脚本
- abap - OpenSQL IN 操作数的正确类型
- java - @Mod 只有“价值”
- ruby-on-rails - 参数丢失或值为空:
- java - 如何删除列表中的所有节点
- java - 在具有 Criteria API 的 JPA 元模型中使用 volatile
- mysql - 在 Openshift 上创建 Keycloak 项目时出现有趣的 MySQL 错误
- karate - 为什么空手道不让我从另一个功能文件中读取变量?
- php - 根据会话 ID 在重复此查询时插入更新
- android - 使用 LayoutInflater 时 setTextSize 方法不起作用: