在 Android 设备上,获取 线性加速度传感器(TYPE_LINEAR_ACCELERATION) 的值需要使用 SensorManager
和 SensorEventListener
。线性加速度传感器用于测量设备在 X、Y、Z 三个方向上的线性加速度(排除重力加速度)。以下是实现步骤和代码示例:
1. 添加权限
线性加速度传感器不需要特殊权限,但需要在 AndroidManifest.xml
中声明使用传感器的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2.布局文件 (activity_main.xml
)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/linearAccelerationValueTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="线性加速度" android:textSize="18sp"/> </LinearLayout>
3..获取线性加速度传感器的值
通过 SensorManager
注册线性加速度传感器的监听器,并在 onSensorChanged()
回调中获取传感器的值。
示例代码:
import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements SensorEventListener { private SensorManager sensorManager; private Sensor linearAccelerationSensor; private TextView linearAccelerationValueTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linearAccelerationValueTextView = findViewById(R.id.linearAccelerationValueTextView); // 获取 SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 获取线性加速度传感器 if (sensorManager != null) { linearAccelerationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); } } @Override protected void onResume() { super.onResume(); // 注册线性加速度传感器监听器 if (linearAccelerationSensor != null) { sensorManager.registerListener(this, linearAccelerationSensor, SensorManager.SENSOR_DELAY_NORMAL); } } @Override protected void onPause() { super.onPause(); // 取消注册传感器监听器 sensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) { // 获取线性加速度传感器的值(单位:m/s²) float x = event.values[0]; // X 轴线性加速度 float y = event.values[1]; // Y 轴线性加速度 float z = event.values[2]; // Z 轴线性加速度 // 显示线性加速度传感器的值 String linearAccelerationValue = String.format("线性加速度:\nX: %.2f\nY: %.2f\nZ: %.2f", x, y, z); linearAccelerationValueTextView.setText(linearAccelerationValue); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 传感器精度变化时的回调 } }
4. 代码说明
-
SensorManager:
-
用于管理设备的传感器。
-
通过
getSystemService(Context.SENSOR_SERVICE)
获取实例。
-
-
线性加速度传感器:
-
使用
Sensor.TYPE_LINEAR_ACCELERATION
获取线性加速度传感器。 -
如果设备不支持线性加速度传感器,
getDefaultSensor()
会返回null
。
-
-
SensorEventListener:
-
实现
onSensorChanged()
方法,获取传感器数据。 -
实现
onAccuracyChanged()
方法,处理传感器精度变化。
-
-
线性加速度传感器的值:
-
event.values[0]
:X 轴线性加速度。 -
event.values[1]
:Y 轴线性加速度。 -
event.values[2]
:Z 轴线性加速度。 -
单位:米每平方秒(m/s²)。
-
-
注册与取消注册:
-
在
onResume()
中注册监听器。 -
在
onPause()
中取消注册监听器,以节省电量。4. 代码说明
-
SensorManager:
-
用于管理设备的传感器。
-
通过
getSystemService(Context.SENSOR_SERVICE)
获取实例。
-
-
线性加速度传感器:
-
使用
Sensor.TYPE_LINEAR_ACCELERATION
获取线性加速度传感器。 -
如果设备不支持线性加速度传感器,
getDefaultSensor()
会返回null
。
-
-
SensorEventListener:
-
实现
onSensorChanged()
方法,获取传感器数据。 -
实现
onAccuracyChanged()
方法,处理传感器精度变化。
-
-
线性加速度传感器的值:
-
event.values[0]
:X 轴线性加速度。 -
event.values[1]
:Y 轴线性加速度。 -
event.values[2]
:Z 轴线性加速度。 -
单位:米每平方秒(m/s²)。
-
-
注册与取消注册:
-
在
onResume()
中注册监听器。 -
在
onPause()
中取消注册监听器,以节省电量。6. 示例运行效果
-
当设备移动时,应用会实时显示当前的线性加速度值(单位:m/s²)。
-
-