Android特色开发_位置与传感器的使用

基于位置的服务

 

         LocationManager的用法:

        

         LocationManagerlocationManager = (LocationManager)

                                                        getSystemService(Context.LOCATION_SERVICE);

         //获取可以用的位置提供器

List<String> providerList = locationManager.getProviders(true);

 

         if(providerList.contains(LocationManager.GPS_PROVIDER)){

         //将位置提供器设置为LocationManager.GPS_PROVIDER

}elseif(providerList.contains(LocationManager.NETWOR_PROVIDER)){

         //将位置提供器设置 为它

}else{//提示没有可以用的位置服务}

 

获得位置

Location location= locationManager.getLastKnownLocation(provider);

 

设置位置:

if(location !=null){

         showLocation();//使用location的两个方法可以获得位置。

}

 

设置监听器,更新状态:

locationManager.requestLocationUpdates(provider,x, x, LocationListener)

 

LocationListenerlocationListener = new LocationListener(){

         ……

         public void onLacationChanged(Locationlocation){

         showLocation();

}

}

 

最后注意要移除监听器

                   locationMananger.removeUpdates(locationListener);

 

反向地理编码:

         (耗时操作都放到子线程完成)

         发送对应的http请求,

         返回json数据

         处理json数据

         将得到的地理位置信息传给handler

 

 

传感器的使用:

1、  获得传感器管理器对象

                  SensorManager sensorManager =(SensorManager)

getSystemService(Context.SENSOR_SERVICE);

 

2、  获得具体的传感器对象

Sensor sensor = senserManager.getDefaultSensor(Sensor.XXX);

           Sensor.TYPE_LIGHT:光照传感器

           Sensor.TYPE_ACCELEROMETER:加速度传感器

           方向传感器:使用加速度传感器和地磁传感器TYPE_MAGNETIC_FIFLD

3、  创建监听器进行监听传感器输出的信号

a)        SensorEventListener listener =new SensorEventListener(){

 //传感器的精度发生变化是调用

onAccuracyChanged(Sensor sensor, int accuracy);

//传感器监测的数值发生变化时调用

onSensorChanged(sensorEvent event);

event存的是一个values数组

}

4、  往传感器上注册监听器

senserManager.registerListener(listener, sensor,SensorManager.SENOR_XXX)

最后一个参数代表传感器的输出信息的频率:

SENSOR_DELAY_UI, SENSOR_NORMAL, SENSOR_DELAY_GAME,

SENSOR_DELAY_FASTEST 更新速率依次递增

 

5、  不使用时一定要注意取消注册监听器

sensorManager.unregisterListener(listener);

 

对于光感:float value = event.values[0],存放的是光照强度

对于加速度传感器:

                    floatxVlaue = event.values[0];

                    floatyVlaue = event.values[1];

                    floatzVlaue = event.values[2];

对于方向:

           使用加速度传感器和地磁传感器。将两个传感器获得到的值,(每个传感器三个数组),放到SensorManager的getRotationMatrix()方法得到一个包含旋转矩阵的R数组:SensorManager.getRotationMatrix(R, null, accelerometerValues,magneticValues

四个参数,第一个长度为9的float数组,第二个用于将地磁向量转换为中立坐标的旋转矩阵,通常指定为null,第三个加速度向量,第四个地磁传感器变量。

           使用getOrientation来计算手机的旋转数据,获得长度为3的values数组,存放的是手机在各个方向上的旋转数据,values[0]记录手机围绕z轴的弧度,values[1]存放的是围绕水平x轴的弧度,values[3]手机围绕y轴的弧度。

           SensorManager.getOrientation(R,values);

                            方便计算我们把弧度转化为角度Math.toDegrees(values[0]);

values[0]的角度是-180到180,180度表示正南方向,0度表示正北方向

其他传感器:压力传感器,温度传感器,螺旋仪传感器。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值