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

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

Android学习第十周_传感器和LBS的相关文章

Android学习 第十周

SharedPreferences保存用户偏好参数 使用SharedPreferences(保存用户偏好参数)保存数据, 当我们的应用想要保存用户的一些偏好参数,比如是否自动登陆,是否记住账号密码,是否在Wifi下才能 联网等相关信息,如果使用数据库的话,显得有点大材小用了!我们把上面这些配置信息称为用户的偏好 设置,就是用户偏好的设置,而这些配置信息通常是保存在特定的文件中!比如windows使用ini文件, 而J2SE中使用properties属性文件与xml文件来保存软件的配置信息;而在A

十一、Android学习第十天——项目开始(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一段落 从今天开始就要在一个项目中(MP3播放器)来更加熟悉之前学习到的各个知识点~ 一个简单的MP3播放器,应该包括以下几个模块: (一)用户界面模块 (二)文件下载模块——下载MP3和LRC文件. (三)XML解析模块——负责解析从服务器端下载的歌曲列表XML. (四)IO模块——负责LRC文件的

linux学习第十周总结

linux学习第十周总结 接着上周的mysql,重点终结日志管理 ,备份还原,主从复制和mysql集群 一.mysql日志管理 事务日志 transaction log 错误日志 error log 通用日志 general log 慢查询日志 slow query log 二进制日志 binary log 中继日志 reley log 1.事务日志 事务型存储引擎自行管理和使用,建议和数据文件分开存放 redo log undo log Innodb事务日志相关配置: show variabl

android学习二十(使用HTTP协议访问网络)

使用HttpURLConnection 在Android上发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient,现在先学习下 HttpURLConnection的用法. 首先需要获取到HttpURLConnection的实例,一般只需new 出一个URL对象,并传入目标网络的地址,然后 调用一下openConnection()方法即可,如下所示: URL URL=new URL("http://www.baidu.com"); HttpURLCon

Android学习笔记十四.深入理解fragment(二) 之《图书详情》实战

深入理解fragment(二) 之<图书详情>实战 通过上一篇博文<深入理解fragment一>,我们学习了Android-Fragment的核心知识点.现在在此基础上,利用Fragment技术开发一款适用于大屏幕手机/平板的查找图书详情的应用软件.该项目主要在于两方面,一是Activity.Fragment的源码实现:二是,布局界面资源文件的实现. 1.res/../BookListFragment.java: 自定义类,继承于ListFragment,无需实现OnCreateV

Android学习笔记十五.深入理解fragment(三) 之《兼容多分辨率的应用》实战

深入理解fragment(三) 之<兼容多分辨率的应用>实战 在上一篇博文中介绍了如何使用Android Fragment开发适用于大屏幕应用,现在我们在上一个应用的基础上继续学习如何使用Fragment开发兼容多分辨率的应用. 1.建立/res/values-large/refs.xml引用资源文件 为了开发兼顾屏幕分辨率的应用,我们需要建立一个引用资源文件,专门用于定义各种引用项.refs.xml引用资源文件中定义了一项引用,其作用就是标明activity_book_list实际引用(@)

geekband android #5 第十周分享

1.传感器的几个概念: 什么是传感器? 通过手机来感受温度,湿度,重力,方向,光线等传感方式. 手机上那些地方运用了传感器? 传感器在手机上广泛的应用,如游戏,微信摇一摇,心率计,计步器等等. 常用的传感器有那些? SENSOR_TYPE_ACCELEROMETER                 //加速度 SENSOR_TYPE_MAGNETIC_FIRLD                 //磁力 SENSOR_TYPE_ORIENTATION                      

Android学习(十)—— Android自定义控件

Android自定义控件 安卓在使用中大多数使用已有的一些控件,用法比较简单,还有一部分是比较复杂的.用户自己想的控件,这些就需要进行自定义控件,今天就来简单说一下自定义控件. 1.绘制过程 创建一个类,继承View类 onMeasure()方法,测量计算视图的大小 onLayout()方法,设置视图在屏幕中显示的位置 onDraw()方法,绘制视图 以上就是自定义控件的绘制过程. 2.主要内容解释 measure操作 用于计算视图的大小,即视图的宽度和长度.在view中定义为final类型,要

Android学习(十九)Dialog对话框

一.什么是Dialog对话框 对话框是当前页面中弹出的一个小窗口,用于显示重要的提示信息,提示用户输入信息,确认信息,或者显示某种状态,如下载进度,退出提示等等.用户需要与对话框进行交互,才能回到原窗口继续执行. 二.几种常见的对话框 1.确认对话框. 2.单选按钮对话框. 3.多选按钮对话框. 4.列表对话框. 5.自定义对话框. 三.Dialog的常用方法 1. AlertDialog.Builder中的create()方法,创建一个dialog. 2.setTitle(),设置标题 3.s