研究了一下午的Sensor 总结下吧
首先Sensor包含许多传感器 有重力 方向 加速度 磁场 光感
这里先说加速度 Sensor.TYPE_ACCELEROMETER
实际上手机处于静止状态时 重力方向有加速度 其他方向没有 此时手机静止没有产生移动 所以所谓加速度不过是对力的判断
这也和官方文档说的一样
如果手机出于自由落体状态 则垂直方向的加速度为0 因为此时水平方向不受力
再看看 方向传感器 Sensor.TYPE_ORIENTATION
如果加速度传感器对力敏感 那么方向传感器则对偏转角度特别敏感 这里也不需要多深的几何知识 记住3个方向
首先手机就像平时一样 竖直放在桌子上
此时X轴方向的数值大约是90 也可能是270 慢慢让手机在桌上转圈 你会发现实际上当手机横置在我们面前时的角度是0 竖直是90 其他时刻的角度都是水平方向上手机转动的角度
Y轴其实和X轴类似 我们最亲切的平面几何 当手机屏幕朝上时 Y轴的值是0 向前 让屏幕向外翻转180度 Y值取到了-180
当屏幕向内翻转180度时 Y值取到了+180 Y值的取值范围就是(-180~+180) 还是360度
最后看看Z轴 其实Z轴最简单 把Xy的平面想象成钥匙孔 手机想象成钥匙
钥匙(手机)向左扭动时 Z值最大取到了90
钥匙(手机)向右扭动时 Z值取到了-90
则是说 Z轴的范围是 -90 到 90
传感器更新频率的说明:
SensorManager.SENSOR_DELAY_FASTEST : as fast as possible 变态般的更新 刷新速度变态的快 电池消耗变态的快 常量是0
SensorManager.SENSOR_DELAY_GAME : rate suitable for game 比较快的更新 适合游戏开发 常量是1
SensorManager.SENSOR_DELAY_NORMAL : normal rate 更新速度一般 真的是一般 敏感不如game 低调不如UI 常量是3
SensorManager.SENSOR_DELAY_UI : rate suitable for UI Thread 一般应用程序多半使用这种 省点 而且判断也比较精确 常量是2//
long start= System.currentTimeMillis();
if (x < -15) {
movement = "right"; //右向
}
if (x > 15) {
movement = "left"; //左向
}
if(Math.abs(x)<3){
movement="ready";//中置位
}
if (!tag.equals(movement)) {
if(bcSwitch){
Intent intent = new Intent();
intent.putExtra("orientation", movement);
activity.sendBroadcast(intent);
System.out.println("prepare brordcast ----> "+movement);
}
tag = movement;
System.out.println(movement+"====>x-->"+x+" +y-->"+y);
if(movement.equals("ready")){
bcSwitch=true;
}else{
bcSwitch=false;
}
}