如果定位服务关闭,英特尔 XDK 地理位置将找不到纬度/经度

Intel XDK Geolocation won't find Lat/Long if location services off

本文关键字:地理位置 找不到 纬度 经度 XDK 英特尔 服务 定位 如果      更新时间:2023-09-26

我正在使用英特尔XDK开发一款应用程序,专门使用Android(Nexus 6P)进行测试。

我已经添加了科尔多瓦地理位置插件以及科尔多瓦的谷歌定位服务,并在打开我的位置服务的情况下进行了测试,它正确地获得了两个插件的位置。

但是,当我关闭定位服务时,什么都没有出现。

这是我当前用于获取位置的代码:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    var Geo={};
    if (navigator.geolocation) {
        console.log('Started location');
        console.log(cordova.plugins.locationServices.geolocation.getCurrentPosition(success, error));
        //navigator.geolocation.getCurrentPosition(success, error, {enableHighAccuracy:true, maximumAge:Infinity, timeout:100000});
    }
    //Get the latitude and the longitude;
    function success(position) {
        console.log('SUCCESS location');
        Geo.lat = position.coords.latitude;
        Geo.lng = position.coords.longitude;
        populateHeader(Geo.lat, Geo.lng);
    }
    function error(){
        console.log("Geocoder failed");
    }
    function populateHeader(lat, lng){
        $('#Lat').attr('data-lat', lat);
        $('#Long').attr('data-long',lng);
    }
}

我所追求的,要么是要求用户打开位置数据的一种方式,要么更好的是在不需要位置服务的情况下获取用户的位置。

您说"当我关闭位置服务时",我假设您的意思是您已进入Android设置并禁用了"位置历史记录"或关闭了设备上的共享"位置"。在这种情况下,您不会获得任何数据,因为用户已选择不共享该信息。请参阅两个插件的自述文件中的警告,这被认为是非常敏感的数据,因此,Android 为用户提供了控制共享此信息的能力。

我不知道是否有一个 API 可以明确告诉您用户是否已禁用该数据。无论如何,您可能应该报告您无法获得所需的数据,这可能是由于各种原因:

  • 用户已禁用位置数据的共享
  • 设备此时无法检索当前位置
  • 当前的"定位模式"不允许检索位置

然后跟进一些关于更改或修复的建议,以便收集和使用这些数据。当然,如果用户对与您的应用共享该信息不感兴趣,则必须优雅地遵守。


编辑2017年2月23日:请参阅下面的评论,以获取一些插件的参考,这些插件可以帮助确定位置服务是否可用。

您必须传递"选项"来确定"超时"的时间,因此返回错误! =)

function cbSucessGeo(p)
{
    console.log(p); //current GPS coordinates
}
function cbFailGeo(e)
{
    switch(e.code)
    {
        case 1:
            alert("PERMISSION DENIED");
            break;
        case 2:
            alert("POSITION_UNAVAILABLE");
            break;
        case 3:
            alert("TIMEOUT");
            break;
        default:
            alert("UNKNOWN ERROR");
            break;
    }
}
var options = { timeout: 5000, maximumAge: 0, enableHighAccuracy: true };
navigator.geolocation.getCurrentPosition(cbSucessGeo, cbFailGeo, options);
如果

关闭 GPS,则会在超时间隔(如果指定)后调用 onError 回调。如果未指定超时参数,则不调用回调。

和平! =)