Android加速度传感器原理

这里我们将通过一个”摇一摇”应用来说明如何使用加速度传感器.但在开发之前,我们先对加速度传感器进行一些简单的介绍。
加速的是描述物体运动速度变化快慢的物理量,以m/s2为单位。在静止时,加速度返回的值为地表静止物体的重力加速度,约为9.8m/s2。加速度传感器输出的信息存放在 SensorEvent的values数组中,此时的values数组会有三个值,分别代表手机在x轴,y轴,z轴方向上的加速度信息。
根据力学原理,我们知道重力的作用永远是向下的,所以当手机竖直时,重力作用在y轴,平放在z轴,横立则在x轴。根据输出的值和手机的空间坐标以及重力的作用原理就可以判断手机放置的状态,比如,当x轴的值接近重力加速度或者接近负的重力加速度,说明设备处于横立状态,同时值为正时左边朝下,值为负时右边朝下。
如果要开发一个“摇一摇”应用,根据静止时的加速度约为9.8m/2 以及摇动时的加速度会发生变化,我们可以设置一个加速度的上限,比如说20m/m2,当达到这个上限时就认为手机进行了摇动。了解了其中的原理之后,开发这个应用很简单,只需要修改前面模版中的传感器类型为加速度传感器,即

sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

然后修改
@Override
public void onSensorChanged(SensorEvent event){
float x = event.values[0];
float y = event.values[0];
float z = event.values[0];
if(x>20 || y>20 || z>20){
Toast.makeText(this,”欢迎使用摇一摇”,Toast.LENGTH_LONG).show();
}
}

源码:

package com.sdutacm.sensor;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements SensorEventListener{

    private SensorManager sensorManager;

    private Sensor sensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSensorManager();
    }


    @Override
    public void onSensorChanged(SensorEvent event) {
        //Sensor 发生变化时,在次通过event.values获取数据
        float x = event.values[0];
        float y = event.values[0];
        float z = event.values[0];
        if(x>20 || y>20 || z>20){
            Toast.makeText(this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    public void getSensorManager() {
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        /**
         * 传入的参数决定传感器的类型
         * Senor.TYPE_ACCELEROMETER: 加速度传感器
         * Senor.TYPE_LIGHT:光照传感器
         * Senor.TYPE_GRAVITY:重力传感器
         * SenorManager.getOrientation(); //方向传感器
         */
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(sensorManager != null){
            //一般在Resume方法中注册
            /**
             * 第三个参数决定传感器信息更新速度
             * SensorManager.SENSOR_DELAY_NORMAL:一般
             * SENSOR_DELAY_FASTEST:最快
             * SENSOR_DELAY_GAME:比较快,适合游戏
             * SENSOR_DELAY_UI:慢
             */
            sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(sensorManager != null){
            //解除注册
            sensorManager.unregisterListener(this,sensor);
        }
    }

}
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philtell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值