Android平台上的11个感应器

Android平台上的11个感应器你都知道吗

本文转载自《http://mycoding.iteye.com/blog/954523》
在Android 2.3中新增了3个感应器,对于Android平台的开发我们通过感应器可以发挥想象设计出一些很实用的软件。下面就一起看下目前API Level为9时一共11个感应器分辨是什么吧.

1. ACCELEROMETER 加速,描述加速度的。
2.GRAVITY 重力,这个在大家都知道。
3.GYROSCOPE 陀螺仪,对于物体跌落检测更强大些,开发游戏少了它会有点遗憾的,API Level 9新增的类型。
4. LIGHT 光线感应器,很多Android手机的屏幕亮度是根据这个感应器的数组自动调节的。
5. LINEAR_ACCELERATION 线性加速器,API Level 9新增的。
6. MAGNETIC_FIELD 磁极感应器。
7. ORIENTATION 方向感应器。
  8. PRESSURE 压力感应器。  
9. PROXIMITY 距离感应器,对于通话后关闭屏幕背光很有用。
10. ROTATION_VECTOR 旋转向量,Android 2.3新增的,如果我们过去处理图像会发现这个还是很有用的,不过这里还是对游戏开发起到辅助。
11. TEMPERATURE 温度感应器,可以获取手机的内部温度,不过和周边的有些差距,毕竟手机内部一般温度比较高。

对于以上感应器Android123提醒开发者,除了特别描述API Level为9或2.3之外的,SDK在1.5即Level 3时就已经支持了,不过最终使用还要看手机硬件的支持,很多山寨机或小品牌的设备可能会在这些上面偷工减料,同时Android开发网提醒大家,感应器的数据刷新比较快一般,考虑到电池功耗一般长时间使用CPU的占用率可能会提升,影响系统性能。

列举手机上已经有的感应器,可以通过SensorManager类的List<Sensor>  getSensorList(int type)  获取,返回一个感应器类型的数组。这里在列举时type参数应该写TYPE_ALL.

Android的常用传感器

1.方向传感器Orientation

2.磁场传感器Megnetic Field

3.温度传感器Temperature

4.光传感器Light

5.压力传感器Pressure

下面一个简单的实例来介绍这些传感器用法:

创建项目:SensorSimulatorTest

项目运行结果:

以上是利用传感器模拟器所产生的结果

关于传感器模拟器SensorSimulator需要登录http://code.googel.com/p/openintents/wiki/SensorSimulator站点,下载SensorSimulator的最新版本。

我下载的最新版本是:2.0-rc1.

关于这个模拟器的使用就不再介绍,具体的请参考:疯狂Android讲义第15章传感器应用开发

下载的文件目录下bin包含该工具的PC端程序和手机端程序

PC端:

手机端:

         

关键代码:

1 package org.wwj.sensor;
2
3 import org.openintents.sensorsimulator.hardware.Sensor;
4 import org.openintents.sensorsimulator.hardware.SensorEvent;
5 import org.openintents.sensorsimulator.hardware.SensorEventListener;
6 import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
7
8 import android.app.Activity;
9 import android.hardware.SensorManager;
10 import android.os.Bundle;
11 import android.widget.EditText;
12
13 public class SensorSimulatorTest extends Activity implements SensorEventListener{
14
15 //  //定义真机的Sensor管理器
16     //private SensorManager mSensorManager;
17     //定义模拟器的Sensor管理器
18     private SensorManagerSimulator mSensorManager;
19     EditText etOrientation;
20     EditText etMagnetic;
21     EditText etTemerature;
22     EditText etLight;
23     EditText etPressure;
24     @Override
25     public void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.main);
28         //获取界面上的EditText组件
29         etOrientation = (EditText) findViewById(R.id.etOrientation);
30         etMagnetic = (EditText) findViewById(R.id.etMagnetic);
31         etTemerature = (EditText) findViewById(R.id.etTemerature);
32         etLight = (EditText) findViewById(R.id.etLight);
33         etPressure = (EditText) findViewById(R.id.etPressure);
34         //获取真机的传感器管理服务
35         //mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
36         //获取传感器模拟器的传感器管理服务
37         mSensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
38         //连接传感器模拟器
39         mSensorManager.connectSimulator();
40     }
41     @Override
42         protected void onResume() {
43             // TODO Auto-generated method stub
44             super.onResume();
45             //为系统的方向传感器注册监听器
46             mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
47                     , SensorManager.SENSOR_DELAY_GAME);
48             //为系统的磁场传感器注册监听器
49             mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
50                     , SensorManager.SENSOR_DELAY_GAME);
51             //为系统的温度传感器注册监听器
52             mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE)
53                     , SensorManager.SENSOR_DELAY_GAME);
54             //为系统的光传感器注册监听器
55             mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
56                     , SensorManager.SENSOR_DELAY_GAME);
57             //为系统的压力传感器注册监听器
58             mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
59                     , SensorManager.SENSOR_DELAY_GAME);
60         }
61     @Override
62         protected void onStop() {
63             // TODO Auto-generated method stub
64             //程序退出时取消注册传感器监听器
65             mSensorManager.unregisterListener(this);
66             super.onStop();
67         }
68     @Override
69         protected void onPause() {
70             // TODO Auto-generated method stub
71             //程序暂停时取消注册传感器监听器
72             mSensorManager.unregisterListener(this);
73             super.onPause();
74         }
75     //当传感器精度改变时回调该方法
76     public void onAccuracyChanged(Sensor arg0, int arg1) {
77         // TODO Auto-generated method stub
78
79     }
80
81     public void onSensorChanged(SensorEvent event) {
82         // TODO Auto-generated method stub
83         float[] values = event.values;
84         ////真机上获取触发event的传感器类型
85         //int sensorType = event.sensor.getType();
86         //模拟器上获取触发event的传感器类型
87         int sensorType = event.type;
88         StringBuilder sb = null;
89         //判断是哪个传感器发生改变
90         switch(sensorType){
91         //方向传感器
92         case Sensor.TYPE_ORIENTATION:
93             sb = new StringBuilder();
94             sb.append("绕Z轴转过的角度: ");
95             sb.append(values[0]);
96             sb.append("\n绕X轴转过的角度: ");
97             sb.append(values[1]);
98             sb.append("\n绕Y周转过的角度: ");
99             sb.append(values[2]);
100             etOrientation.setText(sb.toString());
101             break;
102         case Sensor.TYPE_MAGNETIC_FIELD:
103             sb = new StringBuilder();
104             sb.append("X方向上的角度: ");
105             sb.append(values[0]);
106             sb.append("\nY方向上的角度: ");
107             sb.append(values[1]);
108             sb.append("\nZ方向上的角度: ");
109             sb.append(values[2]);
110             etMagnetic.setText(sb.toString());
111             break;
112         case Sensor.TYPE_TEMPERATURE:
113             sb = new StringBuilder();
114             sb.append("当前的温度是: ");
115             sb.append(values[0]);
116             etTemerature.setText(sb.toString());
117             break;
118         case Sensor.TYPE_PRESSURE:
119             sb = new StringBuilder();
120             sb.append("当前压力为: ");
121             sb.append(values[0]);
122             etPressure.setText(sb.toString());
123             break;
124         }
125
126     }
127 }
1 <!-- 通过模拟器调试需要访问网络 -->
2     <uses-permission android:name="android.permission.INTERNET"/>
.
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: