安卓传感器的简单使用(1)

  • 介绍一些传感器的api

  • 利用加速传感器 简单实现计步器

前言


这学期学习了移动软件开发课程后,自己尝试实现了个小功能,就是利用手机自带的加速传感器实现个简单的计步器。

介绍一些传感器的api


一般来说,智能机中都支持一下常见的传感器

如:温度传感器(tempreture sensor);压力传感器(pressure sensor);光传感器(light sensor);加速度传感器(accelerometer sensor)等等等等;

传感器有几个比较重要的API:

SensorManager(用以获取SensorManager实例,提供各种方法例如访问传感器列表,获取方位信息等等)

Sensor(用以选择传感器)

SensorEventListener(通过这个接口创建两个回调用法来接收传感器的事件通知,比如当传感器的值发生变化时)

利用加速传感器 简单实现计步器


  • 通过getSystemService来获得SensorManager实例对象

  • registerListener使用为系统的加速度传感器注册监听器,其需要传递3个参数:传感器的监听器,待监听的传感器,传感器的采样率。这里通过getDefaultSensor()方法指定我们需要的加速度传感器,通过SensorManager.SENSOR_DELAY_NORMAL直接使用正常频率的采样率,其他采样率分别为(FASTEST最快;GAME适合游戏;UI适合普通用户界面UI变化)

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

bindViews();

}

从registerListener()方法可以看出,它需要传递一个SensorEventListener对象,它就是传感器的监听器,其中包含两个方法,需要开发人员去实现它:

  • void onAccuracyChanged(Sensor sensor,int accuracy):当传感器精度发生变化时回调。

  • void onSensorChanged(SensorEvent event):当传感器感应的值发生变化时回调。

传感器的精度一般不会发生改变,所以主要关注传感器感应的值发生变化,也就是在onSensorChanged上

重写监听器的onSensorChanged()方法,其中event获取当当前监听事件的参数,根据官方文档:

values [0]:x轴上的加速度减去Gx

values [1]:y轴上的加速度减去Gy

values [2]:z轴上的加速度减去Gz

在这里插入图片描述

在这里插入图片描述

从上面两张图片可以发现 value数组的三个值其实就分别对应X,Y,Z轴上的加速度!

public void onSensorChanged(SensorEvent event) {

double x = event.values[0];

double y = event.values[1];

double z = event.values[2];

current = Math.sqrt(xx+yy+z*z);//计算当前的模

//向上加速的状态

if(motiveState==true)

{

if(current>=last)last = current;

else {

//检测到一次峰值

if(Math.abs(current-last)>1)

{

original =current;

motiveState=false;

}

}

}

//向下加速的状态

if(motiveState==false)

{

if(current<=last)last=current;

else

{

if(Math.abs(current-last)<1) //检测到一次峰值

{

original=current;

if(processState==true)

{

step++;//步数 + 1

if(processState==true)

{

tv_step.setText(step+“”);//读数更新

}

}

motiveState = true;

}

}

}

}

然后因为传感器的精度一般不变化,所以

重写onAccuracyChanged方法的时候 就可以不用管它

public void onAccuracyChanged(Sensor sensor, int accuracy) {

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
存中…(img-Ucgs5AwU-1715255048436)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值