1.传感器的基本介绍
通过硬件的物理特性获取压力,重力,光感应,加速度等信息。主要应用于摇一摇等手机应用上面。
2.Android手机上常用的传感器
在android2.3 gingerbread系统中,google提供了传感器供应用层使用
- SENSOR_TYPE_ACCELEROMETER 1 //加速度
- SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
- SENSOR_TYPE_ORIENTATION 3 //方向
- SENSOR_TYPE_GYROSCOPE 4 //陀螺仪
- SENSOR_TYPE_LIGHT 5 //光线感应
- SENSOR_TYPE_PRESSURE 6 //压力
- SENSOR_TYPE_TEMPERATURE 7 //温度
- SENSOR_TYPE_PROXIMITY 8 //接近
- SENSOR_TYPE_GRAVITY 9 //重力
- SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
- SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量
3. 使用方法
- 获取SensorManager对象
- 获取Sensor对象
- 注册Sensor对象
- 重写onAccuracyChanged,onSensorChange这两个方法
- 注销Sensor对象
代码说明:
/* 实现SensorEventListener,重写2个方法 */
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private ImageView mSensorImageView;
private Sensor mSensor;
private SensorManager mSensorManager;
private float mStartDegree = 0f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorImageView = (ImageView) findViewById(R.id.sensor_imageView);
/* 获取SensorManager对象 */
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
/* 获取Sensor对象,参数决定是哪一种类型的传感器*/
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
/* onResume方法里注册Sensor对象 */
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_UI);
}
/* onPause方法里注销Sensor对象 */
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION){
float degree = - event.values[0];
RotateAnimation rotateAnimation = new RotateAnimation( mStartDegree,degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,
0.5f);
rotateAnimation.setDuration(300);
mSensorImageView.startAnimation(rotateAnimation);
mStartDegree = degree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
4.注意事项
1、并不是说有的手机都具有所有上述传感器
大部分手持设备和桌面设备都具有加速度和磁力感应器,但是带气压和温度计的设计就少得多了。而且,在一台设备上某类感应器的数量也可以有多个。比如一台设备可以带有两个重力感应器,每个感应器的量程各不相同。
2、不同的系统版本引入的传感器是不同的
- 比如,很多传感器是自Android1.5(API level 3)开始引入的,但其中有些并未实现而直到2.3(API 9)才可用的。
- 同样,一部分传感器是自Android2.3和Android4.0才引入的。有两个传感器已经过时,被更好更新的传感器取代。
5.针对手机是否具有传感器的优化
方法一:
if (mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)!= null){
//success
}else{//传感器不存在}
方法二:
在Android市场过滤器来限定目标设备必须带有指定的传感器配置(如果手机没有传感器,则不能下载安装该app)
- 在运行时检测传感器
if{//success!There‘s a xxx sensor}
else
{//xxx传感器不存在}
- 用Android Market过滤器来限定目标设备必须带有的指定传感器配置
<uses-feature
android:name="android:hardware.sensor.accelerometer"
android:required="true"/>
6.使用注意事项
- 别忘记注销
- 不要在模拟器上测试你的app
- 不要阻塞onSensorChanged()方法
- 避免使用过时的方法或传感器类型
- 在使用前先验证传感器
- 小心选择传感器延时
7.相关开源项目地址截图
8.LBS基础
1、什么是LBS定位
LBS是基于位置服务的应用,常见的有微信附近的人,我的位置,分享我的位置等;外卖应用,根据当前位置发现附近的餐厅等。
2、主要应用场景
- 签到
- 定位
- 导航
- 路线图
- 周边生活服务
- 社交
- 附近的人
3、地图的使用
Android原生使用的是Google Map,所以系统会提供基于Google Map提供的地图服务,但是有很多的限制。
4.API对比
A. Google map
- gps坐标系,最稳定,卫星地图精细
- 但是在中国被墙
- 手机必须具有Google Service FrameWork
- 在中国基本不FQ不root不可用
B.百度地图和高德地图
- 百度地图,卫星地图不精细
- 支持全球定位,功能迭代快,地图数据加载快
- 高德地图,稳定性较好。支持全球定位,但是卫星地图不精细
- 高德和百度等国内地图都只有中国的数据
- “火星坐标”系统
5、接入百度地图SDK
a. 在百度地图开放平台(百度地图开放平台http://lbsyun.baidu.com/index.php?title=androidsdk);
b. 申请秘钥
c. 根据说明集成代码
时间: 2024-10-11 13:23:15