首页 > 解决方案 > 如何在 Android 中获取 G-Force Sensor?

问题描述

有没有办法使用 Android Studio 从我的设备读取或计算 G-Force 到 TextView 中?

标签: androidsensorscalculation

解决方案


我假设你的意思是加速度计?它内置于手机中,用于测量 X、Y 和 Z 轴上的运动。当然可以在 TextView 上显示这些。为此,您首先要在类中声明 aSensorManager和 a ,如下所示:SensorMainActivity

private SensorManager SensorManager1;
private Sensor AccelSensor;

SensorManager基本上允许您访问设备的传感器,并且Sensor它本身可以从您选择的传感器中检索数据。

在您的OnCreate()中,您可以设置它们。

SensorManager1 = ( SensorManager ) getSystemService( SENSOR_SERVICE );

一旦分配给系统的传感器,您现在可以继续设置您的个人传感器。

AccelSensor = SensorManager1.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );

AccelSensor现在设置为从手机的加速度计接收数据,但是,它尚未连接到SensorManager,这意味着它无法访问读数。

SensorManager1.registerListener( this, AccelSensor, SensorManager.SENSOR_DELAY_NORMAL );

为此,请将其连接到SensorManagerwith registerListener()

现在,您将在上面的代码中看到一个红色下划线。不要惊慌,你只是还没有实现所需的方法。我们使用“this”来指代SensorEventListener,但 Android Studio 看不到它。为此,请使用您的public class MainActivity extends AppCompatActivity并添加implements SensorEventListener到其中。它最终应该是:

public class MainActivity extends AppCompatActivity implements SensorEventListener {
...
}

现在,之前的红线已经消失,但新的红线出现了!您现在所要做的就是右键单击implements SensorEventListener,Android Studio 应该会为您提供实现方法的选项。单击它并实施onSensorChanged()and onAccuracyChanged()。您现在将看到代码中弹出两个新函数。

我们不需要onAccuracyChanged,所以就这样吧:

@Override
    public void onAccuracyChanged( Sensor sensor, int accuracy ) {
        // unused, but android studio needs this here
    }

onSensorChanged 我们需要的。这就是每次传感器更新或更改时调用的内容。在这里我们可以更新之前的 TextView 以显示值。

SensorEvent'sevent是一个包含 3 个值的数组。这三个值是加速度计的 X、Y 和 Z 读数,分别位于索引 0、1 和 2。因此,我们可以将它们简单地与一个字母连接起来(以显示哪个读数是哪个),如下所示:

这应该将每个值显示为“[X/Y/Z] = [value]”

@Override
    public void onSensorChanged( SensorEvent event ) {
        ViewX.setText( "X = " + event.values[ 0 ] );
        ViewY.setText( "Y = " + event.values[ 1 ] );
        ViewZ.setText( "Z = " + event.values[ 2 ] );
    }

就是这样!您现在有一个工作传感器来查看加速度计的读数,它们将显示在 TextViews 上。


推荐阅读