码迷,mamicode.com
首页 > 移动开发 > 详细

Android学习第十周_传感器和LBS

时间:2016-05-13 00:11:29      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

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. 根据说明集成代码

Android学习第十周_传感器和LBS

标签:

原文地址:http://blog.csdn.net/cqupt2011214692/article/details/51344326

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!