Android 传感器之《加速传感器》——摇一摇功能
来源:互联网 发布:基础设施网络建设 编辑:程序博客网 时间:2024/06/03 05:06
Android传感器开发参考网站:
Android Developers镜像网站:http://wear.techbrood.com/guide/topics/sensors/sensors_overview.html
Android Developers中文翻译:http://blog.csdn.net/think_soft/article/details/8054692
仿微信摇一摇功能主要使用加速传感器
1.获取传感器管理器的实例
sensorManager = (SensorManager) getSystemService(Service.SENSOR_SERVICE);
2.在Activity的onResume生命周期方法中注册加速传感器
SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rateUs)参数详解:
listener :传感器监听事件,SensorEventListener接口,提供了以下两个回调方法:
onSensorChanged(SensorEvent event):传感器值的变化
event的实例的values变量非常重要,根据传感器的不同,里面的值代表的含义也不相同,以加速传感器为例:
values该变量的类型是float[]数组,最多有三个元素:
float x = values[0] 代表X轴
float y = values[1] 代表Y轴
float z = values[2] 代表Y轴X轴的方向是沿着屏幕的水平方向从左向右。如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置。Y轴的方向是从屏幕的左下角开始沿着屏幕的垂直方向指向屏幕的顶端。将手机平放在桌子上,Z轴的方向是从手机里指向天空。
我们判断手机是否摇一摇,只要x,y,z轴,达到设定的阀值时就表示摇一摇。onAccuracyChanged(Sensor sensor, int accuracy):传感器精度的变化
精度使用以下四个状态常量之一来代表的:
SENSOR_STATUS_ACCURACY_LOW
SENSOR_STATUS_ACCURACY_MEDIUM
SENSOR_STATUS_ACCURACY_HIGH
SENSOR_STATUS_UNRELIABLE
sensor :传感器实例,这里使用加速传感器 sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER
rateUs : 感应器反应速度,有四个常量共选择
SENSOR_DELAY_NORMAL:匹配屏幕方向的变化,默认传感器速度;
SENSOR_DELAY_UI:匹配用户接口,如果更新UI建议使用;
SENSOR_DELAY_GAME:匹配游戏,游戏开发建议使用SENSOR_DELAY_FASTEST.:匹配所能达到的最快;
以上四种常量,根据实际情况选择,一般情况选择第一种就可以。
3. 在onPause生命周期方法中,注销相应传感器
SensorManager.unregisterListener(SensorEventListener listener, Sensor sensor)
注意:为防止同一时间内重复触发摇一摇事件,可以设置一个记录上次触发事件的时间点变量,用于控制是否触发摇一摇事件!
示例代码:package com.example.androidtest;import android.app.Activity;import android.app.Service;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends Activity implements SensorEventListener{//触发摇一摇的最小时间间隔private final int SHAKE_SHORTEST_TIME_INTERVAL = 5;//传感器值变化的阀值private final int SHAKE_SHORTEST_SENSOR_VALUE = 10;private long lastShakeTime = 0;private SensorManager sensorManager;private Sensor sensor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) getSystemService(Service.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this, sensor); }@Overridepublic void onSensorChanged(SensorEvent event) {long currentTime = System.currentTimeMillis();int type = event.sensor.getType();if (((currentTime-lastShakeTime) <= SHAKE_SHORTEST_TIME_INTERVAL) ||(type != Sensor.TYPE_ACCELEROMETER)) {return;}lastShakeTime = currentTime;float[] values = event.values;if ((Math.abs(values[0]) > SHAKE_SHORTEST_SENSOR_VALUE || Math.abs(values[1]) > SHAKE_SHORTEST_SENSOR_VALUE || Math.abs(values[2]) > SHAKE_SHORTEST_SENSOR_VALUE)){ Toast.makeText(this, "摇一摇成功", Toast.LENGTH_SHORT).show(); } }@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}
- Android 传感器之《加速传感器》——摇一摇功能
- 传感器之加速传感器
- Android - 小功能 - 传感器之重力传感器
- android传感器摇一摇功能
- android传感器摇一摇功能
- android---加速传感器
- android 加速的传感器(重力传感器)
- Android——加速传感器(ACCELEROMETER)的应用
- android传感器;摇一摇抽签功能
- Android传感器之-方向传感器Orientation功能实现与源码
- Android传感器——方向传感器TYPE_ORIENTATION
- Android传感器之磁场传感器
- Android传感器之陀螺仪传感器
- Android传感器之加速度传感器
- Android传感器之距离传感器
- Android传感器之光照传感器
- Android传感器之姿态传感器
- Android 传感器之方向传感器
- linux 服务器优化设置
- 指针数组和数组指针的区别
- 单向哈希函数 JAVA版本
- WebService端口号修改
- 通过SpringAOP+注解实现自动代理
- Android 传感器之《加速传感器》——摇一摇功能
- android通过camera和surfaceview选择摄像头并即时预览
- cocos2d-x学习笔记:SpriteBatchNode
- merge 使用与实例3
- Android开源项目第一篇——个性化控件(View)篇
- pci总结
- 五个编程谬论
- 【Android开发经验】LayoutInflater——80%的Android程序员对它并不了解甚至错误使用
- Rest API 开发 学习笔记 概述