【问题标题】:Phonegap Build: accelerometer not working androidPhonegap Build:加速度计无法正常工作
【发布时间】:2014-08-13 09:14:58
【问题描述】:

首先让我说我已经看到了很多这样的问题,其中许多只是说<script src="cordova-x-x-x.js"></script>,有些说不将cordova.js文件包含到Phonegap Build中。

所以我已经测试和修复我的代码一段时间了,但仍然收到来自onError function 的错误。我还复制并粘贴了phonegap docs的代码。

所以这是来自 url 的干净代码:

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

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">
    document.addEventListener("deviceready", onDeviceReady, false);

    function onDeviceReady() {
        navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
    }

    function onSuccess(acceleration) {
        alert('Acceleration X: ' + acceleration.x + '\n' +
              'Acceleration Y: ' + acceleration.y + '\n' +
              'Acceleration Z: ' + acceleration.z + '\n' +
              'Timestamp: '      + acceleration.timestamp + '\n');
    }

    function onError() {
        alert('onError!');
    }

    </script>
  </head>
  <body>
  </body>
</html>

在我的 config.xml 文件中我添加了:

<gap:plugin name="org.apache.cordova.device-motion" />
<gap:plugin name="org.apache.cordova.device-orientation" />

【问题讨论】:

    标签: android cordova phonegap-build


    【解决方案1】:

    在测试并询问 Phonegap Build 工作人员后,他们向我展示了包含所有功能的代码。这是让加速度计与 Phonegap Build 配合使用的最佳方式

        <!DOCTYPE html>
    <html>
      <head>
        <title>Device Ready Example</title>
    
        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
        <script type="text/javascript" charset="utf-8">
    
        function onLoad() {
            document.addEventListener("deviceready", onDeviceReady, false);
        }
    
        function onDeviceReady() {
            alert("Device is Ready");
            alert(device.available);
        }
    
        function getAcceleration(){
            navigator.accelerometer.getCurrentAcceleration(onAccelSuccess, onError);
        }
    
        function onAccelSuccess(acceleration) {
            var element = document.getElementById('accelerometer');
            element.innerHTML = 'Acceleration X: ' + acceleration.x         + '<br />' +
                                'Acceleration Y: ' + acceleration.y         + '<br />' +
                                'Acceleration Z: ' + acceleration.z         + '<br />' +
                                'Timestamp: '      + acceleration.timestamp + '<br />';
        }
    
        function onError() {
            alert('onError!');
        }
    
        function startWatch() {
            // Update acceleration every 1 seconds
            var options = { frequency: 1000 };
    
            watchID = navigator.accelerometer.watchAcceleration(onAccelSuccess, onError, options);
        }
    
        function stopWatch() {
            if (watchID) {
                navigator.accelerometer.clearWatch(watchID);
                watchID = null;
            }
        }
        </script>
      </head>
      <body onload="onLoad()">
        <p>
            <button onclick="getAcceleration()">Get Acceleration</button>
        </p>
        <p>
            <button onclick="startWatch()">Watch Acceleration</button>
        </p>
        <p>
            <button onclick="stopWatch()">Stop Watching Acceleration</button>
        </p>
        <div id="accelerometer">Waiting for accelerometer...</div>
      </body>
    </html>
    

    【讨论】:

    • 即使使用这段代码我仍然有问题(我很确定这是正确的)。 LogCat 显示我在调用 watchAcceleration(...) 后正在使用 BOSCH BMA250 3 轴加速度计 (HTC One M7) .. 也没有错误)
    【解决方案2】:

    我会说您尝试使用cordova 彻底重新安装/重建。首先,您必须为此安装cordova。如果您想知道如何开始,您应该查看cordova 文档:Cordova CLI-Docs

    安装cordova后,进入终端并输入以下命令:

    • cd ~/桌面
    • cordova 创建测试 com.example.test 测试
    • cd 测试
    • cordova 平台添加 android
    • cordova 插件添加 org.apache.cordova.device-motion
    • cordova 构建

    在Eclipse中打开构建好的项目并添加

    <!DOCTYPE html>
    <html>
      <head>
        <title>Acceleration Example</title>
    
        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
        <script type="text/javascript" charset="utf-8">
    
        // Wait for device API libraries to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);
    
        // device APIs are available
        //
        function onDeviceReady() {
            navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
        }
    
        // onSuccess: Get a snapshot of the current acceleration
        //
        function onSuccess(acceleration) {
            alert('Acceleration X: ' + acceleration.x + '\n' +
                  'Acceleration Y: ' + acceleration.y + '\n' +
                  'Acceleration Z: ' + acceleration.z + '\n' +
                  'Timestamp: '      + acceleration.timestamp + '\n');
        }
    
        // onError: Failed to get the acceleration
        //
        function onError() {
            alert('onError!');
        }
    
        </script>
      </head>
      <body>
        <h1>Example</h1>
        <p>getCurrentAcceleration</p>
      </body>
    </html>
    

    保存所有内容并将项目部署到您的设备。让我知道这是否有效。

    【讨论】:

    • 我正在使用 Phonegap Build。所以不需要重新安装cordova/phonegap
    • 如果您不想尝试任何事情,因为您认为您知道该解决方案,那么请随意尝试任何事情,但不要在这里寻求帮助。 Phonegap 和 Cordova 是相似的(相同的代码库)。但是有一些差异(谷歌那个)。即使这些差异很小,也有机会与科尔多瓦一起使用。 stackoverflow.com/questions/24605033/…
    • 好吧,那我需要在我的电脑上安装cordova/phonegap,下载Eclipse,安装所有东西并设置一个工作区等。我使用Phonegap Build(基于云),所以没有选项重新安装任何东西。但我可以稍后再试,需要下载所有内容和 android sdk
    【解决方案3】:

    不能发表评论,所以回答吧。

    参考上述评论“Phonegap 和 Cordova 相似(相同的代码库)”

    来自http://docs.build.phonegap.com/en_US/3.1.0/introduction_getting_started.md.html

    为此,只需确保在您的 index.html

    请注意,这可以与

    互换

    【讨论】:

      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 2018-12-14
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多