您的位置:首页 > 移动开发 > Android开发

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

2015-08-17 20:48 531 查看
基于位置的服务

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度表示正北方向

其他传感器:压力传感器,温度传感器,螺旋仪传感器。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: