传感器的使用

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

  方向传感器:   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

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

 

指南针Demo:

  

复制代码
 1 package com.android.hzy.sensor;
 2 
 3 import android.app.Activity;
 4 import android.content.Context;
 5 import android.hardware.Sensor;
 6 import android.hardware.SensorEvent;
 7 import android.hardware.SensorEventListener;
 8 import android.hardware.SensorManager;
 9 import android.os.Bundle;
10 import android.view.animation.Animation;
11 import android.view.animation.RotateAnimation;
12 import android.widget.ImageView;
13 
14 public class MainActivity extends Activity {
15 
16     private SensorManager sensorManager;
17     private Sensor sensor;
18     private MySensorEventListener listener;
19     private ImageView iv;
20     
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         
26         iv = (ImageView) findViewById(R.id.iv);
27         iv.setKeepScreenOn(true);// 保持屏幕的高亮
28         
29         // 得到sensor管理器
30         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
31         sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// 得到方向传感器
32         
33         listener = new MySensorEventListener();
34         
35     }
36     
37     /**
38      * 第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。
39         最快: SensorManager.SENSOR_DELAY_FASTEST
40         最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。
41         游戏: SensorManager.SENSOR_DELAY_GAME
42         游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。
43         普通: SensorManager.SENSOR_DELAY_NORMAL 
44         标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。
45         用户界面: SensorManager.SENSOR_DELAY_UI
46      */
47 
48     @Override
49     protected void onResume() {
50         // TODO Auto-generated method stub
51         super.onResume();
52         // 注册sensor监听  传感器非常的消耗性能,显示在前台的时候再注册监听
53         sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
54     }
55     
56     @Override
57     protected void onPause() {
58         // TODO Auto-generated method stub
59         super.onPause();
60         // 取消监听
61         sensorManager.unregisterListener(listener);
62     }
63     
64     /**
65      * 传感器事件监听
66      * @author Administrator
67      *
68      */
69     private final class MySensorEventListener implements SensorEventListener{
70 
71         private float predegree = 0;
72         
73         @Override
74         public void onSensorChanged(SensorEvent event) {
75             // TODO Auto-generated method stub
76             float x = event.values[SensorManager.DATA_X];
77             float y = event.values[SensorManager.DATA_Y];
78             float z = event.values[SensorManager.DATA_Z];
79             
80             // 指南针只需用到X轴
81             RotateAnimation animation = new RotateAnimation(-predegree, x, //
82                     Animation.RELATIVE_TO_SELF, 0.5f, //
83                     Animation.RELATIVE_TO_SELF, 0.5f);
84             
85             animation.setDuration(200);
86             iv.startAnimation(animation);
87             
88             predegree = x;
89         }
90         
91         @Override
92         public void onAccuracyChanged(Sensor sensor, int accuracy) {
93             // TODO Auto-generated method stub
94             
95         }
96         
97     }
98     
99 }
posted @ 2015-09-30 10:37  laughingQing  阅读(665)  评论(0编辑  收藏  举报