1.

传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。

  方向传感器:   Sensor.TYPE_ORIENTATION

  加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER

  光线传感器:    Sensor.TYPE_LIGHT

  磁场传感器:   Sensor.TYPE_MAGNETIC_FIELD

  距离(临近性)传感器: Sensor.TYPE_PROXIMITY

  温度传感器:   Sensor.TYPE_TEMPERATURE

//获取某种类型的感应器

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//注册监听,获取传感器变化值

sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。

最快: SensorManager.SENSOR_DELAY_FASTEST

最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。

游戏: SensorManager.SENSOR_DELAY_GAME

游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。

普通: SensorManager.SENSOR_DELAY_NORMAL

标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。

用户界面: SensorManager.SENSOR_DELAY_UI

一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。

 

2. 示例 方向传感器做指南针

方向传感器 x y z 值的含义

/*x该值表示方位,0代表北(North);90代表东(East);180代表南(South);270代表西(West

    如果x值正好是这4个值之一,并且手机是水平放置,手机的顶部对准的方向就是该值代表的方向。

 

  y值表示倾斜度,或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。y值的取值范围是-180≤y值 ≤180

  假设将手机屏幕朝上水平放在桌子上,这时如果桌子是完全水平的,y值应该是0(由于很少有桌子是绝对水平的,

  因此,该值很可能不为0,但一般都是-55之间的某个值)。这时从手机顶部开始抬起,直到将手机沿X轴旋转180度(屏幕向下水平放在桌面上)。

  在这个旋转过程中,y值会在0-180之间变化,也就是说,从手机顶部抬起时,y的值会逐渐变小,

  直到等于-180。如果从手机底部开始抬起,直到将手机沿X轴旋转180度,这时y值会在0180之间变化。

  也就是y值会逐渐增大,直到等于180。可以利用y值和z值来测量桌子等物体的倾斜度。

 

  z值表示手机沿着Y轴的滚动角度。表示手机沿着Y轴的滚动角度。取值范围是-90≤z值≤90

  假设将手机屏幕朝上水平放在桌面上,这时如果桌面是平的,z值应为0。将手机左侧逐渐抬起时,

  z值逐渐变小,直到手机垂直于桌面放置,这时z值是-90。将手机右侧逐渐抬起时,z值逐渐增大,

  直到手机垂直于桌面放置,这时z值是90。在垂直位置时继续向右或向左滚动,z值会继续在-9090之间变化。

  */

示例代码

public class MainActivity extends Activity {private ImageView iv;private SensorManager sensorManager;private MyListener listener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.iv);sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);// 获取系统的方向传感器Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// sensorManager.getOrientation(R, values)listener = new MyListener();sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);}private class MyListener implements SensorEventListener {float endAngle = 0;@Overridepublic void onSensorChanged(SensorEvent event) {float  startAngle = event.values[0];System.out.println("角度:"+startAngle);RotateAnimation ra = new RotateAnimation(-endAngle, startAngle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);iv.startAnimation(ra);endAngle = startAngle; //旋转后  的角度}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}@Overrideprotected void onDestroy() {sensorManager.unregisterListener(listener);listener = null;super.onDestroy();}}


 

 

更多相关文章

  1. 解决android工程引用多个jar包导致的文件重复的错误
  2. Android(安卓)滑动切换页面 以及屏幕手势
  3. Android(安卓)系统(132)---ODM 开发用户常见需求文档(六)
  4. android 手机利用重力感应摇晃 换歌曲 “摇晃”实现
  5. Android-REC制作[从入门到精通]
  6. android 7.0 手机调用手机相机、相册常见的两个崩溃:FileUriExpos
  7. Android(安卓)Sensor HAL层分析
  8. Android获取手机通话记录的方法
  9. Android小机器人

随机推荐

  1. Android(安卓)App监听软键盘按键的方式与
  2. 重温Android——调节屏幕亮度
  3. Ubuntu操作系统配置阿里云镜像方法一
  4. JS事件监听与派发及form常用事件、JS字符
  5. 获取表单元素、Dom遍历及增删改、JS操作
  6. 如何从阿里云官方镜像站下载ubuntu并安装
  7. 再解 JavaScript 原型 与原型链
  8. Windows 10配置阿里云DNS
  9. html的class命名规范(前端类名取名)
  10. JavaScript 数组常见操作(一)