Android实现传感器应用及位置服务
Android实现传感器应用及位置服务
开发工具:Andorid Studio 1.3
运行环境:Android 4.4 KitKat
代码实现
这里需用获取加速度传感器和地磁传感器,手机获取旋转的方向都是通过加速度传感器和地磁传感器共同计算得出来的,给传感器注册监听器,这里由于精度要求,需要使用SENSOR_DELAY_GAME来提高传感器更新速率
private void initSensor() {sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(sensorEventListener, magneticSensor, SensorManager.SENSOR_DELAY_GAME);sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
}
在监听器里面的主要工作就是通过两者的数据共同计算旋转角度,通过矩阵计算出所需旋转的角度,更新图片旋转角度
private SensorEventListener sensorEventListener = new SensorEventListener() {float[] accelerometerValues = new float[3];float[] magneticValues = new float[3];private float lastRotateDegree;@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {accelerometerValues = sensorEvent.values.clone();} else if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {magneticValues = sensorEvent.values.clone();}float[] R = new float[9];float[] values = new float[3];SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);SensorManager.getOrientation(R, values);float rotateDegree = -(float)Math.toDegrees(values[0]);if (Math.abs(rotateDegree - lastRotateDegree) > 1) {RotateAnimation animation = new RotateAnimation(lastRotateDegree, rotateDegree,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);animation.setFillAfter(true);imgCompass.startAnimation(animation);lastRotateDegree = rotateDegree;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
位置服务这边通过LocationManager来获取位置服务,检测手机是否打开位置服务,主要就是调用手机的位置服务,包括GPS和Network,从Provider中获得相应的经纬度,更新UI
private void initLocation() {locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);List<String> providerList = locationManager.getProviders(true);String provider = null;if (providerList.contains(LocationManager.GPS_PROVIDER)) {provider = LocationManager.GPS_PROVIDER;} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {provider = LocationManager.NETWORK_PROVIDER;} else {Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show();return;}try {Location location = locationManager.getLastKnownLocation(provider);if (location != null) {showLocation(location);}locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);} catch (Exception e) {e.printStackTrace();}
}
注册的locationListener中只需要使用onLocationChanged即可,就是更新UI
private LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) { showLocation(location); }@Overridepublic void onStatusChanged(String s, int i, Bundle bundle) {}@Overridepublic void onProviderEnabled(String s) {}@Overridepublic void onProviderDisabled(String s) {}
};private void showLocation(Location location) {edtLott.setText("" + location.getLongitude());edtLatt.setText("" + location.getLatitude());
}
当程序退出的时候,需要注销已经注册的监听,关于Location的部分使用try语句,因为有可能需用使用到Network
@Override
public void onDestroy() {super.onDestroy();if (sensorManager != null) {sensorManager.unregisterListener(sensorEventListener);}if (locationListener != null) {try {locationManager.removeUpdates(locationListener);} catch (Exception e) {e.printStackTrace();}}
}
最后给程序添加使用传感器的权限即可
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
效果图
初始化界面->偏转手机->点击按钮->刷出经纬度
工程下载
传送门:下载
转载于:https://www.cnblogs.com/wsine/p/5177885.html
Android实现传感器应用及位置服务相关推荐
- android如何让gps服务停止,android – 启动/停止GPS(或位置服务)时接收通知(通过BroadcastReceiver)...
我通过使用侦听PROVIDERS_CHANGED操作的BroadcastReceiver尝试了一种方法,但这只能告诉我何时打开/关闭位置设置.我想知道什么时候使用位置服务来获取任何应用程序的位置.我不 ...
- Android位置服务介绍,并介绍如何通过LocationManager对象获取位置信息
1.位置服务,英文翻译为Location-Based Services,简称LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务, ...
- Android 腾讯位置服务地图简单使用
文章目录 概述 腾讯位置服务地图SDK 兼容性 创建工程 获取Appkey 配置AppKey 配置工程 代码混淆 权限配置 地图 基础地图 地图类型 个性化地图 3D建筑 行政区划 出现的问题及解决 ...
- 高德的位置服务器,高德位置服务浅析
前言 在分析华为 agps 的位置获取具体实现逻辑时,通过抓包发现有一条发送到高德的数据流: agps 的原理是手机通过移动网络向基站的 agps 服务器请求得到当前位置的卫星星历信息(包括仰角.轨道 ...
- 关于Android中的位置服务解读
关于Android中的位置服务解读 一提到位置或者定位,一般的开发者会第一时间百度地图和高德.这么做其实把自己仅仅当成了一个Api caller.还是细细了解一下系统的关于位置的架构比较好.下面开始细 ...
- Android 腾讯位置服务使用(详细步骤+源码)
腾讯位置服务使用 前言 正文 一.注册腾讯位置服务账号 二.创建平台应用Appkey 三.创建并配置AS工程 四.定位 ① 连续定位 ② 单次定位 ③ 后台定位 ④ 地理围栏 五.地图 ① 基础地图 ...
- android 基于位置服务,Android 基于位置服务的基本知识
1.在android平台使用位置服务需要使用位置管理器,获得方法如下: String locationService =Context.LOCATION_SERVICE; LocationManage ...
- 国外基于android的系统,基于Android的位置服务系统设计与实现
摘要: 近年来,随着移动互联网的飞速发展,位置服务已经成为移动增值业务的一个重要发展方向,然而由于现代位置服务应用规模不断扩大,用户和兴趣点的数据急剧增加,降低了周围兴趣点查询服务的实用性.本文通过地 ...
- Android 位置服务——BaiduLocation的使用
Android 位置服务--BaiduLocation的使用 原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处 ...
- android位置服务与GPS实时定位工具类
一.概述 据专家说:人类活动80%的信息与空间位置信息有关,这还真不是专家吹牛.举个例子:你跟女神约饭,你得知道女神在哪里吧?你们选择约在哪里的餐厅最合适?你们过去分别有多远?你们怎么过去?--总结起 ...
最新文章
- Python_赋值和深浅copy
- Docker快速验证tomcat单机多实例方案
- DPDK — DPDK APP 的指令行参数
- 汇编和python-python语言属于汇编语言吗?_后端开发
- CV之IS:计算机视觉之图像分割(Image Segmentation)算法的挑战任务、算法演化、目标检测和图像分割(语义分割/实例分割/全景分割)的对比
- MySQL MGR与Galera性能测试
- CADENCE ORCAD原理图导出FPGA UCF的方法
- 下载频道12月热门资源TOP100强力推荐!
- jodconverter 远程配置_jodconverter支持什么格式转换
- Python代码制作“恐龙跳一跳“小游戏
- java做报表_Java报表制作详细过程
- 什么是前端开发工程师?
- 0045-量化第十天:QMT-以DMA指标为例调用系统指标
- 隔空投送教程|如何将文件从iPhone或iPad空投到Mac计算机?
- html flappybird小游戏代码,原生js实现Flappy Bird小游戏
- 高德地图轨迹回放功能
- PHP中国际化地数字格式处理
- ios 结构体跟枚举变量的区别_[Swift]枚举、类与结构体的对比
- 记录一次Oracle自动化测试工具 - OATS实战分享
- ISIS DIS与OSPF DR/BDR的不同点
热门文章
- 3D渲染和动画制作KeyShot Pro for mac
- MacOS Monterey12.3和Big Sur11.6.5离线安装包
- Cisdem PDFMaster for Mac(PDF批量转换工具)
- DaVinci Resolve Studio 17.4 for Mac(达芬奇剪辑调色软件)
- 如何解决PS软件工作区不能吸附到工具栏?
- 矢量图形设计工具Artboard快捷键汇总
- 使用Tenorshare iCareFone for mac如何对iPhone进行系统修复?
- RecyclerView的基础用法
- 微软今天发布免费安全软件套装
- Spark提交任务到集群