首页 > 编程知识 正文

加速度传感器app安卓,智能手机加速度传感器

时间:2023-05-04 04:36:38 阅读:252583 作者:4081

加速度传感器

加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。

该数值包含地心引力的影响,单位是m/s^2。

将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81(由于地球的固有重力)。

将手机朝下放在桌面上,z轴为-9.81。

将手机向左倾斜,x轴为正值。

将手机向右倾斜,x轴为负值。

将手机向上倾斜,y轴为负值。

将手机向下倾斜,y轴为正值。

Android 加速度传感器的类型是  Sensor.TYPE_ACCELEROMETER

通过 android.hardware.SensorEvent 返回加速度传感器值。

加速度传感器在手机中应用非常的广泛,在开发的过程当中也非常的简单,(获取到值是真的非常的简单,想要实现某种功能还是需要自己想想怎么加判断吧)

举个栗子:手机摇一摇的功能:

这个算是比较简单的判断了,获取到x,y,z的值之后,对这三个值进行判断,摇一摇手机的话这些值肯定会发生变化,我们定一个阈值,当它们的值超过某一个数字之后就进行了摇一摇,配合代码实现更容易理解

手机摇一摇功能实现 @Override public void onSensorChanged(SensorEvent event) { // 传感器返回的数据 float x=event.values[0]; float y=event.values[1]; float z=event.values[2]; StringBuffer buffer = new StringBuffer(); buffer.append("X方向的加速度为:").append(String.format("%.2f", x)).append("n"); buffer.append("Y方向的加速度为:").append(String.format("%.2f", y)).append("n"); buffer.append("Z方向的加速度为:").append(String.format("%.2f", z)).append("n"); if (x>20||y>20||z>20){ Toast.makeText(AccelerometerActivity.this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show(); } mTvAccelerometer.setText(buffer); }

上面代码可以看到,通过x,y,z的值的变化来判断手机是否进行了摇一摇,这个判断是比较简单的,思路就是这么个思路,这种判断有缺点,上面判断的是xyz的值不管是哪一个超过了20就认定手机进行了摇一摇,但是忽略了一点,就是用户往一个方向甩动手机也能触发,最好的就是只判断zy,并且判断的xy必须同时超过20才能认定是摇一摇,以下是改过的代码

if (x>20&&y>20){ Toast.makeText(AccelerometerActivity.this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show();} 抬手亮屏

还有相对摇一摇来说复杂一点的功能--抬手亮屏,这个也是对xyz进行判断,这里就不放代码了,简单说一下思路,当我们拿起手机的时候,加速度传感器xyz的值肯定会发生变化,我们可以判断它的结束值,就是手机对着我们的脸的时候传感器的值是个什么样的状态(我低着头对着手机的时候是x:0,y:8,z:5),我们可以对这个值进行判断,在手机200ms内达到这个值就被认定抬手亮屏

代码部分

下面是获取加速度传感器的值以及手机摇一摇的代码

public class AccelerometerActivity extends AppCompatActivity implements SensorEventListener { private TextView mTvAccelerometer; private SensorManager sensorManager; private Sensor sensor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_accelerometer); mTvAccelerometer = findViewById(R.id.tv_accelerometer); // 获取传感器管理者对象 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 获取加速度传感器对象 sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } @Override protected void onResume() { super.onResume(); if (sensorManager!=null){ // 添加监听器 sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI); } } @Override protected void onPause() { super.onPause(); if(sensorManager != null){ //解除注册 sensorManager.unregisterListener(this,sensor); } } @Override public void onSensorChanged(SensorEvent event) { // 传感器返回的数据 float x=event.values[0]; float y=event.values[1]; float z=event.values[2]; StringBuffer buffer = new StringBuffer(); buffer.append("X方向的加速度为:").append(String.format("%.2f", x)).append("n"); buffer.append("Y方向的加速度为:").append(String.format("%.2f", y)).append("n"); buffer.append("Z方向的加速度为:").append(String.format("%.2f", z)).append("n"); if (x>20&&y>20){ Toast.makeText(AccelerometerActivity.this,"欢迎",Toast.LENGTH_SHORT).show(); } mTvAccelerometer.setText(buffer); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }}

更多手机传感器使用请看Android中的传感器(总)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。