安卓传感器开发
来源:互联网 发布:淘宝售前售后客服设置 编辑:程序博客网 时间:2024/04/29 04:24
昨天利用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。不深究,看名字猜一下,应该是不能禁用触摸传感器。
开发者文档的例子很好,拷贝过来讲解。
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中找到。
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,当加速度超过某个值,则在后台播放音乐。这样跑步时就可以听着音乐控制自己的部分了。蛮好玩的。
- 安卓传感器开发
- 安卓加速传感器开发
- 安卓传感器开发之指南针
- 安卓传感器-重力传感器
- 安卓传感器api
- 安卓传感器 Sensor
- 安卓传感器介绍
- 安卓 传感器基础
- 安卓传感器
- 安卓手机传感器
- 安卓传感器+WIFI
- 安卓开发中光线传感器的运用步骤
- 安卓距离传感器编程
- 安卓传感器使用详解
- Iwfu-安卓传感器(1)
- android sensor 安卓传感器
- 安卓方向传感器方位角
- 安卓 计步传感器
- laravel belongsTo()&hasOne()用法详解
- 六、封装EventBus
- 什么是域名?什么网站名?什么是URL?
- python发送表单到java,java接收中文乱码
- javaweb学习总结(二十四)——jsp传统标签开发
- 安卓传感器开发
- Spark Streaming小结
- 点击图片实现放大或缩小
- oracle分区表
- 【cocos2dx】编译安卓平台遇到报错 com.sun.tools.javac.Main is not on the classpath
- 直方图均衡化原理
- sim900芯片—GPRS模块ppp拨号上网
- java设计模式——单例模式(Singleton Pattern)
- java中equals和hashcode方法