【发布时间】:2021-10-17 12:21:08
【问题描述】:
有没有办法使用 Android Studio 将 G-Force 从我的设备读取或计算到 TextView 中?
【问题讨论】:
-
什么是“重力感应器”?你是说加速度计吗?
标签: android sensors calculation
有没有办法使用 Android Studio 将 G-Force 从我的设备读取或计算到 TextView 中?
【问题讨论】:
标签: android sensors calculation
我假设您是指加速度计?它内置于手机中,用于测量 X、Y 和 Z 轴上的运动。当然可以在 TextView 上显示这些。为此,您需要首先在 MainActivity 类中声明 SensorManager 和 Sensor,如下所示:
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 );
为此,请使用registerListener() 将其连接到SensorManager。
现在,您将在上面的代码中看到一个红色下划线。不要惊慌,你只是还没有实现所需的方法。我们使用“this”来指代SensorEventListener,但Android Studio 看不到它。为此,请使用您的 public class MainActivity extends AppCompatActivity 并将 implements SensorEventListener 添加到其中。它最终应该是:
public class MainActivity extends AppCompatActivity implements SensorEventListener {
...
}
现在之前的红线已经消失了,但新的红线出现了!您现在所要做的就是右键单击implements SensorEventListener,Android Studio 应该会为您提供实现方法的选项。单击它并实现onSensorChanged() 和onAccuracyChanged()。您现在将看到在您的代码中弹出两个新函数。
我们不需要onAccuracyChanged,所以就这样吧:
@Override
public void onAccuracyChanged( Sensor sensor, int accuracy ) {
// unused, but android studio needs this here
}
onSensorChanged 是我们需要的。这就是每次传感器更新或更改时调用的内容。在这里我们可以更新之前的 TextView 以显示值。
SensorEvent 的event 是一个包含 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 上。
【讨论】: