概述
加速度传感器
加速度传感器又叫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中的传感器(总)
最后
以上就是完美太阳为你收集整理的Android中的传感器之---加速度传感器的全部内容,希望文章能够帮你解决Android中的传感器之---加速度传感器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复