android 传感器使用与开发
  7xuzTHwScvxO 2023年11月02日 53 0



目前Android手机基本带有的传感器有:


1,加速度传感器: accelerometer   


Sensor.TYPE_ACCELEROMETER

2,  电磁场(磁力)传感器:

Sensor.TYPE_MAGNETIC_FIELD

3,方向传感器: orientation  (Sensor.TYPE_ORIENTATION)

4,   光线传感器: light       (Sensor.TYPE_LIGHT)

5,距离传感器  proximity   


Sensor.TYPE_PROXIMITY

6,  陀螺仪传感器 gyroscope


Sensor.TYPE_GYROSCOPE



7,重力传感器


等.


我们可以通过Android提供给我们的传感器管理器(SensorManager)来管理这些。

SensorManagersm = (SensorManager) getSystemService(SENSOR_SERVICE);  获取系统传感器管理器。

然后通过此管理器获取并管理我们的传感器。


获取 某个类型的默认传感器:

Sensor  sensor = getDefaultSensor(Sensor.TYPE_LIGHT);//光线传感器


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



.registerListener(sensorLightListener,lightSensor, SensorManager.SENSOR_DELAY_NORMAL);

第一个参数:对传感器系统的监听,数据的改变等。实现 

event获取

第二个参数是,传感器类别,即:监听的传感器。

第三个参数,采样率。分为:最快游戏普通用户界面

当应用程序请求特定的采样率时,其实就是对传感器子系统的一个建议,不保证特定的采样率可用。

最快:  SensorManager.SENSOR_DELAY_FASTEST  ,此采样率延迟最低,敏感度很高,但是造成的手机电池消耗很大,再加上获取的数据为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。不特别敏感的处理,不推荐使用。

游戏:SensorManager.SENSOR_DELAY_GAME  ,一般绝大多数实时性较高的游戏使用次级别。

普通:SensorManager.SENSOR_DELAY_NORMAL;比较标准的延迟,一般益智类或容易级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。


用户界面: SensorManager.SENSOR_DELAY_UI   一般对于屏幕方向的自动旋转使用,相对节能和逻辑处理,游戏开发中不建议使用。

accuracy的值,也就是那四个常量相应的整数:

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

使用传感器做应用的难点在于 获取数据后,如何处理数据获取响应的所需效果,这里就涉及到了很多数学物理知识。

下面一个关于光线传感器的一个小例子。


public class LightSensorActivityextends Activity implements
private TextViewcontent;
private SensorManagersm;
private SensorlightSensor;
 

@Override
protectedvoid
//  TODO
super.onCreate(savedInstanceState);
setContentView(R.layout.light_sensor);
content = (TextView) findViewById(R.id.content);
//获得传感器管理器实例
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
 
}
 
@Override
protectedvoid
super.onResume();

//获得光线传感器实例
lightSensor =sm.getDefaultSensor(Sensor.TYPE_LIGHT);
if (lightSensor ==null) {
content.setText("无此类传感器");
} else
//为传感器管理器注册监听
sm.registerListener(this,lightSensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
}
 
@Override
protectedvoid
//  TODO
super.onPause();
注销监听
sm.unregisterListener(this);
}
 
@Override
public  void
//将values的值显示到屏幕上
content.setText(event.values[0]+"'");
}
 
@Override
public  void onAccuracyChanged(Sensor sensor, int
//  TODO
Toast.makeText(this,"accuracy = "+accuracy, Toast.LENGTH_SHORT).show();
}
 
 }
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  7VNj03Sk0rti   2023年11月02日   57   0   0 寄存器android操作数
7xuzTHwScvxO