前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >安卓传感器开发_android传感器开发

安卓传感器开发_android传感器开发

作者头像
全栈程序员站长
发布2022-11-11 11:52:13
发布2022-11-11 11:52:13
69900
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

昨天利用Vibrator将手机改造成振动器,女票大人很满意,今天再接再厉,研究一下Android传感器如何开发……

主要涉及到三个类,Sensor, SensorManager, SensorEventListener。看名字就知道大概意思了,Sensor传感器,SensorManager传感器管理者, SensorEventListener传感器事件监听。

SensorManager开发者文档给的类简介,是这么介绍的:

SensorManager lets you access the device’s sensors. Get an instance of this class by calling Context.getSystemService() with the argument SENSOR_SERVICE. Always make sure to disable sensors you don’t need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off. 说了一点注意事项,就是当不需要的时候,一定要确保禁用传感器了,否则电量会快速耗尽

但是也有一个传感器是例外:Trigger Sensor。不深究,看名字猜一下,应该是不能禁用触摸传感器。

开发者文档的例子很好,拷贝过来讲解。

代码语言:javascript
代码运行次数:0
运行
复制
public class SensorActivity extends Activity, implements SensorEventListener { 
   
                //SensorEventListener是接口类,必须实现它的方法
     private final SensorManager mSensorManager;
     private final Sensor mAccelerometer;

     public SensorActivity() {
         mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
         mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                     //指定特定的传感器
     }

     protected void onResume() {
         super.onResume();
         mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);//在onResume()方法中调用SensorManager的registerListener()方法,为指定的传感器注册监听器。
     }

     protected void onPause() {
         super.onPause();
         mSensorManager.unregisterListener(this);
     }

    //这是接口类SensorEventListener必须实现的方法
     public void onAccuracyChanged(Sensor sensor, int accuracy) {
     }

     public void onSensorChanged(SensorEvent event) {
     }
 }

由该例子可知开发传感器应用的大致步骤: 1. 调用Context的getSystemService(SENSOR_SERVICE)方法来获取SensorManager对象。 2. 调用SensorManager的getDefaultSensor( )方法来获取指定类型的传感器。 3.在Activity的onResume()方法中调用SensorManager的registerListener()方法,为指定的传感器注册监听器,程序通过实现监听器即可获取传感器传回来的数据。

registerListener()方法有三个参数,分别如下:

istener A SensorEventListener object. sensor The Sensor to registerto. samplingPeriodUs 获取数据的频率

最后实现一个例子,该例子可在《疯狂的Android讲义》P622中找到。

代码语言:javascript
代码运行次数:0
运行
复制
public class MainActivity extends Activity implements SensorEventListener { 

//定义系统的Sensor管理器
SensorManager sensorManager;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取程序界面上的文本框组件
editText = (EditText) findViewById(R.id.text);
//获取系统的传感器管理服务
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@Override
protected void onResume(){
super.onResume();
//为系统的加速度传感器注册监听器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onStop(){
//取消注册
sensorManager.unregisterListener(this);
super.onStop();
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float[] values = sensorEvent.values;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("X方向上的加速度:");
stringBuilder.append(values[0]);
stringBuilder.append("\nY方向上的加速度:");
stringBuilder.append(values[1]);
stringBuilder.append("\nZ方向上的加速度:");
stringBuilder.append(values[2]);
editText.setText(stringBuilder.toString());
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}

照着书码完之后,发现一个很有意思的事情,就是不一定非要在Activity的onResume()方法中注册。如果是这样的话,那就可以开开脑洞了….假如在Service中注册SensorEventListener,当加速度超过某个值,则在后台播放音乐。这样跑步时就可以听着音乐控制自己的部分了。蛮好玩的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187832.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月29日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档