javascript - Cordova compass API (navigator.compass.watchHeading) 不起作用(错误代码 3)

标签 javascript android cordova cordova-plugins compass

我正在尝试使用 cordova compass 运行示例应用程序,但每次调用错误回调时都会使用错误代码 3。

我使用cordova V4.0,当然我添加了插件org.apache.cordova.device-orientation。代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>Compass Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // The watch id references the current `watchHeading`
    var gWatchID = null;

    // Wait for device API libraries to load
    document.addEventListener("deviceready", onDeviceReady, false);

    // device APIs are available
    function onDeviceReady() {
        startWatch();
    }

    // Start watching the compass
    function startWatch() {
        // Update compass every 3 seconds
        var options = { frequency: 3000 };

        if (!gWatchID)
            gWatchID = navigator.compass.watchHeading(onSuccess, onError, options);
    }

    // Stop watching the compass
    function stopWatch() {
        if (gWatchID) {
            navigator.compass.clearWatch(watchID);
            gWatchID = null;
        }
    }

    // onSuccess: Get the current heading
    function onSuccess(heading) {
        var element = document.getElementById('heading');
        element.innerHTML = 'Heading: ' + heading.magneticHeading;
    }

    // onError: Failed to get the heading
    function onError(compassError) {
        alert('Compass error: ' + compassError.code);
    }

    </script>
  </head>
  <body>
    <div id="heading">Waiting for heading...</div>
    <button onclick="startWatch();">Start Watching</button>
    <button onclick="stopWatch();">Stop Watching</button>
  </body>
</html>

应用程序已成功构建、部署并启动。但启动时只显示错误代码3。

根据文档,仅定义了两个错误代码: compass 错误.COMPASS_INTERNAL_ERR = 0; compass 错误.COMPASS_NOT_SUPPORTED = 20;

所以我想知道错误代码3是什么意思? 我做错了什么?

感谢您的回答, 但丁

最佳答案

您的设备没有磁传感器,或者 vendor 尚未在操作系统中实现对其的支持。

查看设备方向插件的Android源代码,启动代码是这样写的(为了简洁做了修改):

List<Sensor> list = this.sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

// If found, then register as listener
if (list != null)
    this.setStatus(CompassListener.STARTING);

// If error, then set status to error
else
    this.setStatus(CompassListener.ERROR_FAILED_TO_START);

不知道他们为什么在那里编写自己的错误代码(public static int ERROR_FAILED_TO_START = 3),但实际上他们应该按照文档中的定义报告COMPASS_NOT_SUPPORTED

关于javascript - Cordova compass API (navigator.compass.watchHeading) 不起作用(错误代码 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26642057/

相关文章:

javascript - 单击屏幕或任何元素以执行功能

javascript - 如何从 HTML 中的 select 标签中提取选定的值?

java - Android 应用关闭后正确重启服务

android - 即使用户已登录,Phonegap android 应用程序在单击后退按钮后退出

javascript - Cordova Ionic 键盘插件在 “Init” 上完全禁用

javascript - jQuery如何从焦点输入字段中删除值

android - Fragment中的Toast,应该使用getActivity()还是getAcitivity().getApplicationContext()?

java - 无法在未调用 Looper.prepare() 的线程内创建处理程序 android

reactjs - Firebase 动态链接不适用于带电容器的 ios

javascript - 为什么 Object.getPrototypeOf 是静态的而不是在对象的原型(prototype)中