gpt4 book ai didi

android - onSensorChanged(SensorEvent event) 始终显示相同的结果

转载 作者:行者123 更新时间:2023-11-29 17:54:07 25 4
gpt4 key购买 nike

我测试了指南针应用程序的源代码。此应用程序已安装在 ginger bread and jelly blast 上。问题是我的指南针应用程序在 jellyblast 中不起作用,但在 Gingerbread 中运行良好。

问题是如果我记录“event.values[0]”,它总是显示相同的结果

这是我的代码

package com.example.compassapp;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements SensorEventListener {

// define the display assembly compass picture
private ImageView image;

// record the compass picture angle turned
private float currentDegree = 0f;

// device sensor manager
private SensorManager mSensorManager;

TextView tvHeading;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//
image = (ImageView) findViewById(R.id.imageViewCompass);

// TextView that will tell the user what degree is he heading
tvHeading = (TextView) findViewById(R.id.tvHeading);

// initialize your android device sensor capabilities
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onResume() {
super.onResume();

// for the system's orientation sensor registered listeners
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onPause() {
super.onPause();
Log.i("aa", "pause");
// to stop the listener and save battery
mSensorManager.unregisterListener(this);
}

@Override
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
Log.i("aa", event.values[0]+"");
// get the angle around the z-axis rotated
float degree = Math.round(event.values[0]);

tvHeading.setText("Heading: " + Float.toString(degree) + " degrees");

// create a rotation animation (reverse turn degree degrees)
RotateAnimation ra = new RotateAnimation(
currentDegree,
-degree,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);

// how long the animation will take place
ra.setDuration(210);

// set the animation after the end of the reservation status
ra.setFillAfter(true);

// Start the animation
image.startAnimation(ra);
currentDegree = -degree;
}
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// not in use
}
}

有人可以解释为什么会这样吗?

最佳答案

因为 type_orientationsensor 在 android 4.0.3 及以上版本中被弃用。

对于高于 4.0.3 的版本,您必须使用 Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD:

  accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

并在 SensorChanged 上获取值:

float[] mGravity;
float[] mGeomagnetic;
public void onSensorChanged(SensorEvent event) {
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];
/*Computes the inclination matrix I as well as the rotation matrix R transforming a vector from the device coordinate
* system to the world's coordinate system which is defined as a direct orthonormal basis*/
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
if (success) {
float orientation[] = new float[3];
/*Computes the device's orientation based on the rotation matrix*/
SensorManager.getOrientation(R, orientation);
azimut = orientation[0]; // orientation contains: azimut, pitch and roll
}
}
mCustomDrawableView.invalidate();
}

参见 here对于 4.0.3 以上版本的指南针基本代码 fragment 。

关于android - onSensorChanged(SensorEvent event) 始终显示相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com