- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我尝试通过 SensorManager.getOrientation
在我的 Android 模拟器上获取方向。在此之前,我使用 SensorManager.getRotationMatrix
获取旋转矩阵,但这总是返回 false
。这是我的 Activity 代码:
public class MainActivity extends Activity implements SurfaceHolder.Callback, View.OnClickListener{<p></p>
public final static String DEBUG_TAG = "MainActivity";
private SensorManager sensorManager;
private SurfaceView preview;
private float[] mGravs;
private float[] mGeoMags;
private float[] mRotationM;
private float[] mOrientation;
private Sensor mAccelerometer;
private Sensor mMagneticField;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
preview = (SurfaceView)findViewById(R.id.SurfaceView1);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mGravs = new float[3];
mGeoMags = new float[3];
mRotationM = new float[16];
mOrientation = new float[3];
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
for (int nI = 0; nI < sensorList.size(); nI++) {
Log.d(DEBUG_TAG, sensorList.get(nI).getName());
}
}
private SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event)
{
synchronized (this) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mGravs, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mGeoMags, 0, 3);
break;
default:
return;
}
if (mGravs != null && mGeoMags != null) {
boolean bSuccess = SensorManager.getRotationMatrix(mRotationM, null, mGravs, mGeoMags);
if (bSuccess) {
SensorManager.getOrientation(mRotationM, mOrientation);
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
private boolean openHardware()
{
sensorManager.registerListener(sensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener, mMagneticField, SensorManager.SENSOR_DELAY_NORMAL);
return true;
}
private void closeHardware()
{
sensorManager.unregisterListener(sensorEventListener);
}
@Override
protected void onResume()
{
super.onResume();
openHardware();
}
@Override
protected void onPause()
{
super.onPause();
closeHardware();
}
@Override
protected void onStop()
{
closeHardware();
super.onStop();
}
}
好的,出现这个问题是因为磁场传感器总是返回 [0.0, 0.0, 0.0]。我怎样才能让磁场传感器返回其他东西?
最佳答案
我遇到了同样的问题。一切都变得错误
关于android - SensorManager.getRotationMatrix 在 Android Emulator 上总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208597/
要在 Android 中从欧拉角(例如俯仰、滚转、方位角)中获取方向,需要执行以下操作: SensorManager.getRotationMatrix(float[] R, float[] I, f
API 演示 -> 图形 -> Compass 它只能正常工作,直到您不更改设备的自然方向。在大多数手机中是纵向的,而大多数 10 英寸平板电脑是横向的。如果您进行更改,则需要将其旋转 90 度。我希
我的线程上有此命令,但它不起作用:sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 我想在不打开我的应用程序的情况下创
我希望实现一个 SensorManager 类,它可以处理所有与传感器相关的事情,但这显然需要我启动一个新 Activity 。 我不打算这样做 - 只是运行计算。是使用服务处理此问题的最佳方式,您可
我正在为平板电脑开发一个应用程序,平板电脑将放在一个围绕给定点旋转的支架上。这意味着当应用程序首次打开时,很少从平板电脑移动。该应用程序将根据平板电脑在支架上的旋转显示各种内容。无论我多么努力地搜索,
在我的应用中,我使用光线和接近传感器来检测手机自掏腰包功能,然后在检测完成后注销 SensorManager。但是,即使应用程序的 CPU 使用率仅显示 1-2 秒,电池使用率始终显示我的应用程序为否
我的应用程序创建了一个 Service,它覆盖了 onStartCommand 以创建一个 SensorManager 并将一个 SensorEventListener 附加到其中一个传感器: pub
我需要检索手机的方向。目前我写了这个: public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType(
我正在为我的 Android 应用程序使用传感器。我用一行代码注册传感器: mySensorManager.registerListener(this, orientationSensor, Sens
我在以下的帮助下获得了我的手机方向 SensorManager.getOrientation 但是结果很不稳定,大概+-8度,有什么好的过滤结果的方法吗? 这是我获取值的方式: public void
我有一个为 Cordova 应用程序编写的 Android 后台服务,我想通过 sensorManager 与加速度计进行交互。 我觉得我已经很接近了,但我认为还不够。 出于某种原因,sensorMa
我在 logcat 中遇到传感器管理器和错误的问题。当我用这一行注册监听器时: sensorMgr.registerListener(this, sensorMgr.getDefaultSensor(
我在资源中找到了这个值。 /** Standard gravity (g) on Earth. This value is equivalent to 1G */ public static
我一直在研究如何在我的 Android 应用程序中读取步数,并在文档中找到了两种完全不同的方法: Using SensorManager : val sensorManager = getSystem
我使用单例模式实现了一个简单的指南针类。一旦我向传感器管理器注册了加速度计和磁力计监听器,内存消耗就会增加。我的 GPS 类与指南针类非常相似,并且我没有出现内存泄漏问题。我在 onSensorCha
@Override protected void onResume(){ //super.onResume(); sensorManager.registerListener
Scala/Android 新手问题。我正在尝试将这个简单的代码从 Java 重写为 Scala。Java 工作代码: private final SensorEventListener mAccLi
我的源代码是: import android.content.Context; import android.hardware.SensorManager; public class ShakeEve
我在三星 S6 上使用心率传感器。为了访问此传感器,从 SDK 版本 > 23 开始,用户必须授予 BODY_SENSORS 权限 https://stackoverflow.com/a/326360
我使用 StackOverflow 的一些建议编写了一个加速度计应用程序(用于学习目的)。一切正常,但我在代码中收到“SensorManager.DATA_X 已弃用”消息作为警告: // setup
我是一名优秀的程序员,十分优秀!