0

私はcordova-2.0.0を使用しており、ユーザーの場所の調整を定義したいと考えています。その上、私はネットワークではなく、gps座標のみを取得したいです。どうすればいいですか?gps-logoがステータスバーに表示されないのはなぜですか?

私のコードindex.htmlスクリプト:

function onSuccess(position) {
        var element = document.getElementById('geolocation');
    element.innerHTML = 'Latitude: '+ position.coords.latitude + '<br />' +
                         'Longitude: '+ position.coords.longitude + '<br />';
    }

// onError Callback receives a PositionError object
    //
function onError(error) {
    var element = document.getElementById('geolocation');
    element.innerHTML = 'code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n';
}

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

// PhoneGap is ready
    function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
4

3 に答える 3

1

ああ、簡単でした。オプション-enableHighAccuracy:true。そしてその働き:)

function onDeviceReady() {
                // Update every 3 seconds
                var options = { frequency: 3000, enableHighAccuracy: true };
                watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
            }

しかし、cordova APIを使用してプロバイダーを定義するにはどうすればよいですか?例:gpsがオフの場合、アプリケーションはアラートを実行します( "お願いします、gpsをオンにしてください!");

于 2012-08-08T06:03:02.043 に答える
0

更新された要件については、GPSステータスをチェックするネイティブプラグインを作成する必要があります。ステータスに応じて、HTMLページにアラートを表示できます。

Androidでネイティブプラグインを作成するためのチュートリアルについては、こちらをご覧ください。

于 2012-08-08T06:14:38.390 に答える
0

ステータスバーにGPSロゴが表示されない場合は、GPSが起動していないことが原因です。たぶん1つのJSファイルがロードされていませんか?

Cordova / phonegapはネイティブコードではありません。watchPosition()関数に設定できるオプションは、maximumAge、timeout、enableHighAccuracy(GPSを使用するため)の3つだけです。NetworkBaseProviderではなくGPSProviderを使用するには、enableHighAccuracyをtrueに設定するだけです。たぶん、onError関数でエラーメッセージを分析して、GPSが無効になっているときに特別なメッセージが送信されるかどうかを確認できます。

編集:私のテストでは、特別なメッセージは表示されず、タイムアウトメッセージのみが表示されます:「位置の取得がタイムアウトしました。」したがって、コルドバでGPSがオンかオフかを確認することはできないと思います...

私の意見では、Cordova / phonegap(およびすべての「クロスプラットフォーム」テクノロジー)は、GPSやTelephonyManagerなどの他のマネージャーを使用してアプリを開発するのに適していません。

そのためのネイティブコードを置き換えることはできません。

私は他の問題を抱えています:clearWatch()を使用してもGPSが停止しない:ここで、私のコード:

var currentTracking = false;
var idwatch = null;

function switchTracking() {
    //when button is pressed to start GPS
    if (!currentTracking) {
        currentTracking = true;
        document.getElementById('switchTracking').value = "Stop GPS"
        tracking();
    }

    //when button is pressed to stop GPS
    else {
        navigator.geolocation.clearWatch(idwatch);
        currentTracking = false;
        document.getElementById('switchTracking').value = "Start GPS"
    }
}

function tracking() {
    if (currentTracking) {
        idwatch = navigator.geolocation.watchPosition(onSuccess, onError,{  timeout: 5000, enableHighAccuracy: true });
    }
    else{
        navigator.geolocation.clearWatch(idwatch);
    }
}

function onSuccess(position) {
   // alert("Gps");

    var lat = document.getElementById('lat');
    var long = document.getElementById('long');
    lat.innerHTML = position.coords.latitude;
    long.innerHTML = position.coords.longitude;
}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: ' + error.code + '\n' +
            'message: ' + error.message + '\n');
}
于 2013-11-06T16:57:05.377 に答える