zoukankan      html  css  js  c++  java
  • ios获取设备手持方向——电子罗盘

    转:http://book.51cto.com/art/201411/457105.htm

    2014-11-15 19:07 张亚飞/崔巍 中国铁道出版社 字号:T | T
     

    《PhoneGap 3.0移动应用开发实战详解》本书对PhoneGap的相关知识进行介绍,共4个部分,31章。主要内容包括:PhoneGap的基本概念和开发环境的建立;原生插件的使用;软件配置、GUI设计以及一些综合性的开发案例;PhoneGap运行原理、自定义插件开发和第三方插件的使用。本节为大家介绍获取设备手持方向——电子罗盘。

    AD:

    10.5  获取设备手持方向——电子罗盘

    很多手机都带有电子罗盘传感器,也被称为电子指南针,就是根据地球的磁场来确定方向。

    PhoneGap电子罗盘插件的完全限定名是org.apache.cordova.device-orientation,可以使用下面的命令安装插件。
     

    1. phonegap plugin add org.apache.cordova.device-orientation 

    一旦安装了插件,就可以使用该插件公开的API,它们都可以使用windows.navigator对象访问。

    通过PhoneGap插件公开的Compass类可以获取罗盘传感器的数据,从而获知手机当前朝向,即设备的手持方向。

    navigator.compass可以返回Compass类的一个实例,该类有以下三个方法:

    compass.getCurrentHeading():获取当前的朝向。

    compass.watchHeading:设置监控,以特定时间间隔获取朝向。

    compass.clearWatch:清除监控设置。

    语法格式如下:
     

    1. navigator.compass.getCurrentHeading(compassSuccess, compassError, compassOptions);  
    2. var watchID = navigator.compass.watchHeading(compassSuccess, compassError, [compassOptions]);  
    3. navigator.compass.clearWatch(watchID); 

    这三个方法与重力感应器的三个方法使用完全一致,只是成功回调函数会返回一个compassHeading对象,该对象包含了朝向信息。

    例如下面的代码,即演示了如何监控电子罗盘的朝向。

    代码内容Chapter_10-06
     

    1. var watchID = null;  
    2.  
    3. // 注册deviceready事件监听,指定deviceready事件处理函数  
    4. document.addEventListener("deviceready", onDeviceReady, false);  
    5. // deviceready事件处理函数,PhoneGap完成加载后调用该函数  
    6. function onDeviceReady() {  
    7.   startWatch(); // 开始监控  
    8. }  
    9.  
    10. // 开始监控  
    11. function startWatch() {  
    12.    // 定义一个选项,传递给Compass.watchHeading()方法,表示每3秒更新一次  
    13.    var options = { frequency: 3000 };  
    14.    // 调用Compass.watchHeading()方法来持续获取罗盘数据  
    15.    watchID = navigator.compass.watchHeading(onSuccess, onError,  
    16.                                                     options);  
    17. }  
    18.  
    19. // 停止监控  
    20. function stopWatch() {  
    21.    if (watchID) {  
    22.       // 调用clearWatch()方法终止持续监控  
    23.       navigator.compass.clearWatch(watchID);  
    24.       watchID = null;                   // 赋值为null清空内存  
    25.    }  
    26. }  
    27.  
    28. // 成功获取当前罗盘数据后的回调函数  
    29. function onSuccess(heading) {  
    30.    var element = document.getElementById('compassHeading');  
    31.    element.innerHTML = '当前朝向是 ' + heading.magneticHeading;  
    32. }  
    33.  
    34. // 不能获取当前罗盘数据后的回调函数  
    35. function onError() {  
    36.    alert('onError!');  

    时间间隔可以使用第三个参数compassOptions来设定。compassOptions是一个对象,该对象包含一个属性frequency,用于以毫秒为单位指定间隔时间。

    compassOptions还可以包含一个属性filter,用于指定一个数字,只有变化超过这个数字才会触发回调函数。目前只有iPhone支持该属性。

    1.失败回调函数

    监控方法的失败回调函数有一个参数error。
     

    1. function onError(error) {  
    2.     navigator.notification.alert(error.code, null, 'Error!');  

    Error中有一个名为code的属性,该属性值可以是如下常量之一,以分别表示出错的原因:

    CompassError.COMPASS_INTERNAL_ERR常量:表示内部错误。

    CompassError.COMPASS_NOT_SUPPORTED常量:表示不支持。

    2.compassHeading对象

    监控方法的成功回调函数会返回一个compassHeading对象。
     

    1. 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返回的是相对于当前竖握或横握的朝向值。

  • 相关阅读:
    Android实战技巧之六:PreferenceActivity使用详解
    Gradle for Android 第三篇( 依赖管理 )
    From 虚拟机模板 创建单节点K8S1.14.1的操作步骤
    Android实例剖析笔记(二)
    Android实例剖析笔记(一)
    Android 传感器
    Eclipse:引用一个项目作为类库(图文教程)
    Android Studio导入Project的方法
    Android Studio导入GitHub上的项目常见问题(有例子)
    AndroidStudio导入项目常见问题
  • 原文地址:https://www.cnblogs.com/lihaibo-Leao/p/4949131.html
Copyright © 2011-2022 走看看