当前位置:   article > 正文

4.16-1 感应器Sensor_sensor_getcurtmpr

sensor_getcurtmpr
1: 列出收集里面到底有多少个传感器.


先弄一个ListView
<ListView
id sencor_list
wid mat
hei mat
/>


在onCreate 方法里面列出所有的传感器信息,显示出来
使用ArrayAdapter就好了
ArrayList<String> names = new ArrayList<>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,android.R.layout.simple_list_item_1,names
);


//传感器的管理,通过这个类,来获取,操作,设置传感器
SensorManager sensorManager =(SensorManager)getSystemService(SENSOR_SERVICE);
//获取制定类型的传感器Sensor.TYPE_ALL 代表获取所有
List<Sensor> sensorList =sensorManager.getSensorList(Sensor.TYPE_ALL);




++++++++++++++++++++++++++++++++++++
计步传感器,SENSOR_就 有现成的 。
++++++++++++++++++++++++++++++++++++


for(Sensor sensor: sensorList){
//便利传感器的类型;
String name=sensor.getName();
//sensor.getStringType();
String vendor = sensor.getVendor();//厂商

names.add(name+""+vendor)
}




怎么做摇一摇呢?
思路:1:获取手机中指定类型的传感器,例如加速度传感器;


添加一个textView id为txt_info


//传感器的处理:加速度传感器
获取一个也是通过sensorMaanger
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROTER);//获取默认指定类型传感器,唤醒的
//注意传感器可能是空的null,因为根本没有这个传感器。
if(sensor !=null){

}


什么时候晃不知道,我们没有办法与当前的情况,所以我们要频繁的获取。
轮询的方式,这样很耗电的。


2:传感器的运行的原理,传感器会获取当前的环境状态数值,不能预知之后,
如果要使用的时候,进行检测,就需要程序一直不停的获取传感器的数值。进行比对和计算,才能知道当前的手机的变化。


3:那么程序通过SensorManager 想指定的传感器进行注册,注册一个监听器。
每隔一段时间,检测传感器的数值,返回给监听器。


if(sensor!=null){


//注册传感器的监听,用于接受传感器的数据


//不需要使用传感器的时候,一定要取消注册,不然很耗内存
sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_NORMAL);
有四种 SensorManager.SENSOR_DELAY_,
1:FASTEST 最精细的。最多的。
2:GAME 游戏的
3:NORMAL 普通的
4:。。了解就好了



实现SensorEventListener这个接口
实现相应的方法
传感器数据变化,收到数值
onSensorChanged()
精度发生变化的时候,可以认为是每秒钟获取的次数,这个基本上是用不到的,例如频率是从快了到慢了,从慢了到快了。
onAccuracyChanged()
}


传感器,如果不释放的话 ,你的手机会一直接听


onDestory(){
//取消监听器
if(sensor!=null)
//取消特定传感器的接受;如果只有一个参数相当于取消这个接口的所有传感器。
sensorManager.unregisterListener(this,sensor);
}


onSensorChanged(SensorEvent event){
//TODO: 处理数据
//获取传感器数据,每种传感器数据个数不同,也就是数据内容个数不同

float[] values=event.values;
//判断传感器类型,处理不同的数据
Sensor sensor =event.sensor;


int type = sensor.getType();//获取传感器类型:


switch(type){
case Sensor.TYPE_ACCELEROMETER://检测加速度传感器
//三个数值,x,y,z

float x = values[0];
float y = values[1];
float z = values[2];
Log.d("SensorActivity","x="+x+"y="+y+"z="+z);
break; 
}




手机拿的时候
x,y,z 是加速度,而不是距离。
关于摇一摇的算法,假如想,x,y,z 如果是任何一个加速度的值大于10或者13那么我认为是在摇一摇。


添加一个成员变量
private int count;
private long lastTime;


然后在onSensorChangel 里面
if(Math.abs(x)>12||Math.abs(y)>12||Math.abs(z)>12){
count++;
long ct = System.currentTimeMillis();
if(lastTime==0){
lastTime=ct;
}else{
if(ct-lastTime>3000){
lastTime=ct;
count=1;
}
}


if(count >5){
//TODO 代表摇一摇了
Toast.makeText(this,"摇一摇了",Toast.LENG);
count=0;
}
}






如果是LIGET:


在switch里面


case Sensor.TYPE_LIGHT:


float lightValue = values[0];
Log.d("SensorLight","light value"+lightvalue)
break;


亮度:
1.SensorManager.LIGHT_XXX常量来定义亮度的
SensorManager.LIGHT_CLOUDY 100
SensorManager.LIGHT_FULLMOON
SensorManager.LIGHT_NO_MOON 0.001
SensorManager.LIGHT_OVERCAST 10000
SensorManager.LIGHT_SHADE
SensorManager.LIGHT_SUNLIGHT  110000
SensorManager.LIGHT_SUNLIGHT_MAX  120000
SensorManager.LIGHT_SUNRISE 400




什么时候需要











































































本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号