为什么gps-logo不会显示在状态栏中?

时间:2012-08-07 07:35:51

标签: cordova gps location

我使用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);
}

3 个答案:

答案 0 :(得分: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!”);

答案 1 :(得分:0)

根据您的更新要求,您必须创建一个原生插件,用于检查GPS状态,并根据您在html页面中发出警报的状态。

访问here获取有关在Android上创建本机插件的教程。

答案 2 :(得分:0)

如果您无法在状态栏中看到GPS徽标,那是因为GPS无法启动。也许没有加载一个JS文件?

Cordova / phonegap不是本机代码,你可以在watchPosition()函数上放置三个选项:maximumAge,timeout和enableHighAccuracy(使用GPS)。您可以将enableHighAccuracy设置为true以使用GPSProvider而不是NetworkBaseProvider。 也许您可以分析onError函数中的错误消息,以查看是否在禁用GPS时发送特殊消息。

编辑:在我的测试中,没有特殊消息设置,只是超时消息:&#34;位置检索超时。&#34;因此,我认为您无法检查GPS中的GPS是打开还是关闭......

在我看来,Cordova / phonegap(以及所有&#34;跨平台&#34;技术)不是使用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');
}