0

私は新しい phonegap ユーザーで、YouTube で見つけたこのコンパスのチュートリアルを試しています。

コンパスの針が動かないことを除けば、すべてうまくいっているようです。

さて、私の addEventListener がどうにか機能していないと思います。

正確な理由もわかりません。

何か助けはありますか?

私のプロジェクトファイル構造

http://i.imgur.com/nBdIvgK.png

見やすくするために自分のプロジェクト ファイルにリンクする

https://docs.google.com/file/d/0B7-DKery9JL4Q2VWMUlaY08tREk/edit?usp=sharing

私のコードは以下にあります。

MainActivity.java

package com.example.compass;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.GeolocationPermissions;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setGeolocationEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

索引.html

<!DOCTYPE html>
<html>
    <title>&nbsp;</title>
    <head>
        <style>
            #compass {

                position: absolute;
                top: 0px;
                left: 0px;
                z-index: 1;
            }
            #needle {

                position: absolute;
                top: 8px;
                left: 98px;
                z-index: 10;
            }

        </style>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
        <script src="jqRotate/jqRotate.js"></script>
    </head>
    <body onload="onLoad()">
        <img src="http://nathanhedglin.us/images/compass.png" id="compass">
        <img src="http://nathanhedglin.us/images/needle.png" id="needle">
    </body>
</html>
<script>

function onDeviceReady() { 
    alert("Starting!");
        startCompass(); //runs the startCompass function
    }

    function onLoad() {
    alert("Loading!!");
        document.addEventListener("deviceready", onDeviceReady, false); //creates a listener that waits for the deviceready event and then fires onDevice ready function
    }

    function startCompass() {

        var options = {
            frequency : 50 //sets the compass heading to be updated every 50 milliseconds
        };

        navigator.compass.watchHeading(onSuccess, onError, options); //gets the compass heading from device and passes heading to onSuccess function
        alert("Compass starting!!");
    }

    function onSuccess(heading) {//device s magnetic heading is passed to heading variable

        $("#needle").rotate(-heading.magneticHeading); //jquery function that gets the #needle id and rotates it minus the current heading
    }

    function onError(compassError) { //if there is an error the error will be passed to onError in the compassError variable
        alert('Compass error: ' + compassError.code); //displays an alert with the error code
    }
</script>
4

1 に答える 1

0

deviceready は onLoad の前に起動されるため、onLoad 内で deviceready を使用することはできません。個人的には、PhoneGap で onLoad を使用しないことをお勧めします。

頭は次のようになります。

// All of your scripts loaded above

<script>
  document.addEventListener("deviceready", onDeviceReady, false);

  function onDeviceReady() {
    // This is where you should initialize your application
  }
</script>

最初に deviceready を追加し、deviceready が起動した後に他のイベント リスナーを追加する必要があります。

于 2013-09-08T14:15:19.543 に答える