您好,欢迎来到微智科技网。
搜索
您的当前位置:首页光传感器

光传感器

来源:微智科技网
 (1)我介绍的是光线感应器(Light Sensor),所谓的光线感应器就是可以感应光线强度的一个设备,而我们对他的开发一般是通过感应光线强度的变化。因为这篇文章是android常用的硬件感应器为主题的,那么我就来介绍怎样在android系统使用光线感应器,我说的真机,因为模拟并没有能够模拟出感应器的效果。。

(2)首先android通过一个SensorManager来管理各种感应器,而获得这个管理器的引用必须通过(SensorManager)getSystemService(Context.SENSOR_SERVICE);这句代码来获得。

(3)在android系统中所有的感应器都属于Sensor类的一个实例,并没有继续细分下去,通过这次的主题,你也会发现android对于感应器的处理几乎是一摸一样的。既然都是Sensor类,那么怎么获得相应的感应器呢?这时就需要通过SensorManager来获得,我们通过这句代码来确定我们要获得感应器类型.

sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);很显然我获得的是光线感应器的引用.

(4)既然已经获得相应的感应器的引用,那么我们的怎么用呢?在第一部分我就说到了我们通过感应光线强度的变化,注意是‘变化’。有些人获取已经明白了,既然是变化,我们肯定需要通过监听他,来获得变化。因为我们就需要给我们的感应器加个监听,android提供了两个监听一个是SensorEventListener,另一个SensorListener,因为后者已经在android API上显示过时了,那么我们就不介绍他了。

(5)知道了有哪些感应器监听,那么我们就来介绍下如何给感应器加监听,这时又需要SensorManager,他就是感应器的保姆,很多关于感应器的部分都要靠他。

SensorManager关于加监听的方法有几个:

registerListenr(SensorListenerlistenr,int sensors,int rate):已过时 registerListenr(SensorListenerlistenr,int sensors):已过时

registerListenr(SensorEventListenerlistenr,Sensor sensors,int rate)

registerListenr(SensorEventListenerlistenr,Sensor sensors,int rate,Handlerhandler)因为SensorListener已经过时,那么相应的注册方法,也就过时了。

说下各个参数的意义:

Listener:相应的引用 Sensor:相应的感应器引用

Rate:感应器的反应速度,这个必须是系统提供4个常量之一的: SENSOR_DELAY_NORMAL:匹配屏幕方向的变化 SENSOR_DELAY_UI:匹配用户接口 SENSOR_DELAY_GAME:匹配游戏

SENSOR_DELAY_FASTEST.:匹配所能达到的最快

Handler:

(6)要注意的是在android中注册了感应器,也就启用了他,而使用感应器是相当耗电的,这些是为什么感应器的应用没有那么泛滥的主要原因,所以我们必须在我们不需要他的时候,关掉他。怎么关闭呢?注册是启用,那么注销就是关闭了。Android有以下一些注销方法:

unregisterListener(SensorEventListenerlistener);

unregisterListener(SensorEventListenerlistener,Sensor sensor);相应的参数作用,我相信大家也就知道了。

(7)知道开和关,那么现在就来介绍具体的用!也就是关于SensorEventListener的实现,实现这个必须实现两个方法:一个是onAccuracyChanged(Sensor sensor, int accuracy),另一个是onSensorChanged(SensorEvent event)。第一个方法是反应速度变化的方法,也就是第五部分的rate变化时的方法.另一个是感应器的值变化的相应的方法。但是需要注意的是,这两个方法是响应的是一起,就是说当感应器发生变化,两个方法都会一起被调用。

下面我介绍下:accuracy的值,也就是那四个常量相应的整数:

SENSOR_DELAY_NORMAL:3 SENSOR_DELAY_UI:2 SENSOR_DELAY_GAME:1 SENSOR_DELAY_FASTEST.:0

现在介绍SensorEvent类:

它有四个成员变量:

Accuracy:精确值

Sensor:发生变化的感应器

Timestamp:发生的时间,单位是纳秒

Values:发生变化后的值,这个是一个长度为3数组

光线感应器只需要values[0]的值,其他两个都为0.而values[0]就是我们开发光线感应器所需要的,单位是:lux照度单位

光线传感器演示1

讲了一大堆的理论,那么下面的例子就来展示一下光线感应器的使用.为什么充分展现光感的使用方法,我这个例子写的非常简单,只写了使用光感必须的代码,然后用了几个textView将光线变化的值展现到用户界面。让使用者可以随时的看到光度的变化。

下面是Activity的代码:

java代码:

1. public class LightDemoActivity extends Activity implements

SensorEventListener{

2. /** Called when the activity is first created. */ 3. SensorManager sensorManager = null;//传感器管理器引用 4. Sensor lightSensor = null;//光线传感器引用 5.

6. //各个文本的引用

7. TextView accuracy_view= null; 8. TextView value_0 = null; 9. TextView value_1 = null; 10. TextView value_2 = null; 11.

12. @Override

13. public void onCreate(Bundle savedInstanceState) { 14. super.onCreate(savedInstanceState); 15. setContentView(R.layout.main); 16.

17. //获得传感器管理器实例

18. sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 19. //获得光线传感器实例

20. lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 21. //获得各个TextView

22. accuracy_view = (TextView)findViewById(R.id.accuracy); 23. value_0 = (TextView)findViewById(R.id.value_0); 24. value_1 = (TextView)findViewById(R.id.value_1); 25. value_2 = (TextView)findViewById(R.id.value_2); 26. } 27.

28. @Override

29. protected void onPause() {

30. // TODO Auto-generated method stub 31. super.onPause(); 32. //注销

33. sensorManager.unregisterListener(this, lightSensor); 34. } 35.

36. @Override

37. protected void onResume() { 38. // TODO Auto-generated method stub 39. super.onResume(); 40. //为传感器管理器注册监听

41. sensorManager.registerListener(this,lightSensor,

SensorManager.SENSOR_DELAY_NORMAL); 42. } 43.

44. @Override

45. public void onAccuracyChanged(Sensor sensor, int accuracy) { 46. // TODO Auto-generated method stub

47. if(sensor.getType() == Sensor.TYPE_LIGHT){ 48. //设置将accuracy的值显示到屏幕上

49. accuracy_view.setText(\"accuracy:\"+accuracy); 50. }

51. 52. } 53.

54. @Override

55. public void onSensorChanged(SensorEvent event) { 56. // TODO Auto-generated method stub

57. if(event.sensor.getType() == Sensor.TYPE_LIGHT){ 58.

59. //将values的值显示到屏幕上 60. float[] values = event.values;

61. value_0.setText(\"value[0]:\"+values[0]); 62. value_1.setText(\"value[1]:\"+values[1]); 63. value_2.setText(\"value[2]:\"+values[2]); . } 65. } 66. 67. }

复制代码

我们来看看讲解的代码:

java代码:

1. 下面讲解代码:

2. //获得传感器管理器实例

3. sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 4. //获得光线传感器实例

5. lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 6.

7. 这段代码的作用是获得感应器管理器引用,并获得光感感应器应用。 8. protected void onResume() { 9. // TODO Auto-generated method stub 10. super.onResume(); 11. //为传感器管理器注册监听

12. sensorManager

13. .registerListener(this,lightSensor, SensorManager.SENSOR_DELAY_NORMAL); 14. }

15. 这段代码的作用在resume的时候重新注册监听,开启光感 16. protected void onPause() {

17. // TODO Auto-generated method stub 18. super.onPause(); 19. //注销

20. sensorManager.unregisterListener(this, lightSensor); 21. }

22. 这段代码的作用是在暂停时注销监听,关闭光感。因为感应器耗电,所以在不用的时候应

该关闭他

23. if(event.sensor.getType() == Sensor.TYPE_LIGHT) 24. {

25. //将values的值显示到屏幕上 26. float[] values = event.values;

27. value_0.setText(\"value[0]:\"+values[0]); 28. value_1.setText(\"value[1]:\"+values[1]); 29. value_2.setText(\"value[2]:\"+values[2]); 30. } 31. 32. }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务