ios获取设备手持方向——电子罗盘
转:http://book.51cto.com/art/201411/457105.htm
《PhoneGap 3.0移动应用开发实战详解》本书对PhoneGap的相关知识进行介绍,共4个部分,31章。主要内容包括:PhoneGap的基本概念和开发环境的建立;原生插件的使用;软件配置、GUI设计以及一些综合性的开发案例;PhoneGap运行原理、自定义插件开发和第三方插件的使用。本节为大家介绍获取设备手持方向——电子罗盘。
AD:
10.5 获取设备手持方向——电子罗盘
很多手机都带有电子罗盘传感器,也被称为电子指南针,就是根据地球的磁场来确定方向。
PhoneGap电子罗盘插件的完全限定名是org.apache.cordova.device-orientation,可以使用下面的命令安装插件。
- phonegap plugin add org.apache.cordova.device-orientation
一旦安装了插件,就可以使用该插件公开的API,它们都可以使用windows.navigator对象访问。
通过PhoneGap插件公开的Compass类可以获取罗盘传感器的数据,从而获知手机当前朝向,即设备的手持方向。
navigator.compass可以返回Compass类的一个实例,该类有以下三个方法:
compass.getCurrentHeading():获取当前的朝向。
compass.watchHeading:设置监控,以特定时间间隔获取朝向。
compass.clearWatch:清除监控设置。
语法格式如下:
- navigator.compass.getCurrentHeading(compassSuccess, compassError, compassOptions);
- var watchID = navigator.compass.watchHeading(compassSuccess, compassError, [compassOptions]);
- navigator.compass.clearWatch(watchID);
这三个方法与重力感应器的三个方法使用完全一致,只是成功回调函数会返回一个compassHeading对象,该对象包含了朝向信息。
例如下面的代码,即演示了如何监控电子罗盘的朝向。
代码内容Chapter_10-06
- var watchID = null;
- // 注册deviceready事件监听,指定deviceready事件处理函数
- document.addEventListener("deviceready", onDeviceReady, false);
- // deviceready事件处理函数,PhoneGap完成加载后调用该函数
- function onDeviceReady() {
- startWatch(); // 开始监控
- }
- // 开始监控
- function startWatch() {
- // 定义一个选项,传递给Compass.watchHeading()方法,表示每3秒更新一次
- var options = { frequency: 3000 };
- // 调用Compass.watchHeading()方法来持续获取罗盘数据
- watchID = navigator.compass.watchHeading(onSuccess, onError,
- options);
- }
- // 停止监控
- function stopWatch() {
- if (watchID) {
- // 调用clearWatch()方法终止持续监控
- navigator.compass.clearWatch(watchID);
- watchID = null; // 赋值为null清空内存
- }
- }
- // 成功获取当前罗盘数据后的回调函数
- function onSuccess(heading) {
- var element = document.getElementById('compassHeading');
- element.innerHTML = '当前朝向是 ' + heading.magneticHeading;
- }
- // 不能获取当前罗盘数据后的回调函数
- function onError() {
- alert('onError!');
- }
时间间隔可以使用第三个参数compassOptions来设定。compassOptions是一个对象,该对象包含一个属性frequency,用于以毫秒为单位指定间隔时间。
compassOptions还可以包含一个属性filter,用于指定一个数字,只有变化超过这个数字才会触发回调函数。目前只有iPhone支持该属性。
1.失败回调函数
监控方法的失败回调函数有一个参数error。
- function onError(error) {
- navigator.notification.alert(error.code, null, 'Error!');
- }
Error中有一个名为code的属性,该属性值可以是如下常量之一,以分别表示出错的原因:
CompassError.COMPASS_INTERNAL_ERR常量:表示内部错误。
CompassError.COMPASS_NOT_SUPPORTED常量:表示不支持。
2.compassHeading对象
监控方法的成功回调函数会返回一个compassHeading对象。
- function onSuccess(compassHeading) {
- }
该对象包含一个特殊时间点捕获的朝向数据,它包含如下几个属性,如表10-2所示。
表10-2 compassHeading对象属性
属 性 |
功 能 描 述 |
magneticHeading |
当前朝向,朝向是一个0~359.99的数字 |
trueHeading |
相对于北极点的朝向,是一个0~359.99的数字。负值表示不能确定朝向 |
headingAccuracy |
表示当前朝向与trueHeading之间的偏差 |
timestamp |
以毫秒为单位的时间戳(DOM时间戳),表示捕捉到的时间 |
在Android环境下,其不支持trueHeading,与magneticHeading返回相同的值。headingAccuracy属性将总是返回0,也就是说,magneticHeading和trueHeading之间没有什么差别。
iOS注意事项
在iOS环境下,trueHeading仅在使用watchLocation()方法返回的compassHeading对象中才被支持。对于iOS 在4.0以上版本的设备中,如果设备旋转,并且程序支持竖握或横握,那么compassHeading返回的是相对于当前竖握或横握的朝向值。
ios获取设备手持方向——电子罗盘的更多相关文章
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- iOS获取设备型号、装置类型等信息
iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...
- iOS获取设备型号和App版本号等信息(OC+Swift)
iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...
- iOS 获取设备唯一标示符的方法
在开发中会遇到应用需要记录设备标示,即使应用卸载后再安装也可重新识别的情况,在这写一种实现方式--读取设备的UUID(Universally Unique Identifier)并通过KeyChain ...
- ios获取设备信息总结
1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名 ...
- iOS 获取设备信息,mac地址,IP地址,设备名称
#import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h&qu ...
- ios 获取设备相关的信息
.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...
- iOS获取设备IP地址
项目用到要获取iOS设备的IP地址,有2种方法: 1)第一种比较简单,但是只有当你的设备连接到WIFI时才能获取到IP地址,倘若你的设备用的是流量,那就不行.代码如下: #import <ifa ...
- iOS获取设备型号、设备类型等信息
摘自 :http://www.mamicode.com/info-detail-1165460.html 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然 ...
随机推荐
- Hibernate- QBC-基本查询
01.环境搭建 02.基本查询 1.方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt &g ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- stm32独立看门狗
转载:http://blog.sina.com.cn/s/blog_7f1dc53b01010mqa.html 实验现象: 开始LED1亮,LED2熄灭,若不隔时间按KEY1则发现LED2因独立看门狗 ...
- jQuery EasyUI教程之datagrid应用
一.利用jQuery EasyUI的DataGrid创建CRUD应用 对网页应用程序来说,正确采集和管理数据通常很有必要,DataGrid的CRUD功能允许我们创建页面来列表显示和编辑数据库记录.本教 ...
- Maven中央仓库——你可能不知道的细节
地址 —— 目前来说,http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中,其它地址包括著名的ibiblio.org,都是镜像. ...
- dm8127前段采集和抓拍
高清监控(944275216) 2014-1-17 9:36:24自主研发高清网络摄像机,720P.960P.1080P系列产品,经济型.低照型.宽动态型等各种机型可选,支持onvif.P2 ...
- Android学习CursorWrapper与Decorator模式 (转至http://www.cnblogs.com/bastard/archive/2012/05/31/2527944.html)
一 Decorator模式 意图: 动态的给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 动态的给一个对象,而不是对整个类添加额外职责,说明此模式将采用的结 ...
- par函数bty参数-控制绘图边框
bty 可以看作box type 的缩写,控制绘图边框的显示,取值范围为o, l, u, c, ], n 默认值为"o", 代码示例: par(bty = "o" ...
- Ironic , Openstack Baremetal Hypervisor
Ironic , Openstack Baremetal Hypervisor,首发于UnitedStack Inc.. 转自: http://ju.outofmemory.cn/entry/4876 ...
- resize2fs: Bad magic number in super-block while trying to open
I am trying to resize a logical volume on CentOS7 but am running into the following error: resize2fs ...