Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 471|回复: 0

开发交流:Android 之 传感器 应用

[复制链接]

该用户从未签到

发表于 2011-10-24 09:15:01 | 显示全部楼层 |阅读模式
传感器的使用
1.传感器类型:

方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。

方向传感器:
Sensor.TYPE_ORIENTATION

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

光线传感器:
Sensor.TYPE_LIGHT

磁场传感器:
Sensor.TYPE_MAGNETIC_FIELD

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

温度传感器:
Sensor.TYPE_TEMPERATURE


2.

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

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

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


3.


java代码
public class MainActivity extends Activity {

       private TextView accelerometer;

       private TextView orientation;

       private SensorManager sensorManager;

      

       @Override

       public void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.main);

              //获取感应器管理器

              sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

              accelerometer = (TextView) findViewById(R.id.accelerometer);

              orientation = (TextView) findViewById(R.id.orientation);

       }

      

       /**

        * 得到具体的感应器

        */   

       @Override

       protected void onResume() {

              Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获取重力加速度传感器

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

              Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);//获取方向传感器

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

              super.onResume();

       }

         

       @Override

       protected void onPause() {

              sensorManager.unregisterListener(listener);//注消所有传感器监听

              super.onPause();

       }

      

       private SensorEventListener listener = new SensorEventListener() {        

              /**

               * 当传感器的值发生变化调用

               */

              @Override

              public void onSensorChanged(SensorEvent event) {         

                     float x = event.values[SensorManager.DATA_X];     

                     float y = event.values[SensorManager.DATA_Y];     

                      float z = event.values[SensorManager.DATA_Z];

                     switch (event.sensor.getType()) {

                     case Sensor.TYPE_ACCELEROMETER:

                            accelerometer.setText("Accelerometer Sensor: " + x + ", " + y + ", " + z);

                            break;

      

                     case Sensor.TYPE_ORIENTATION:

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

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

                           

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

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

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

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

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

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

                           

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

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

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

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

                            orientation.setText("Orientation Sensor: " + x + ", " + y + ", " + z);

                            break;

                     }

              }

                    

              /**

               * 当传感器的精度发生变化调用

               */  

              @Override

              public void onAccuracyChanged(Sensor sensor, int accuracy) {        

              }

       };

       }
复制代码



上面的注释对 X Y Z 的作用进行了比较好理解的说明,比看官方文档应该要好理解多了
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:15:13 | 显示全部楼层

Re:开发交

对,确实好理解的多
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 19:02 , Processed in 0.353098 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表