Javascript 英特尔XDK地理定位赢得';如果位置服务关闭,则找不到Lat/Long

Javascript 英特尔XDK地理定位赢得';如果位置服务关闭,则找不到Lat/Long,javascript,android,cordova,geolocation,intel-xdk,Javascript,Android,Cordova,Geolocation,Intel Xdk,我正在使用Intel XDK开发一个应用程序,我专门用android(Nexus 6P)进行测试 我已经为Cordova添加了Cordova地理定位插件和Google定位服务,并在打开我的定位服务的情况下进行了测试,它正确地获得了这两个插件的位置 然而,当我关闭定位服务时,什么也看不到 以下是我当前用于获取位置的代码: document.addEventListener(“DeviceRady”,OnDevicerady,false); 函数ondevicerady(){ var Geo={}

我正在使用Intel XDK开发一个应用程序,我专门用android(Nexus 6P)进行测试

我已经为Cordova添加了Cordova地理定位插件和Google定位服务,并在打开我的定位服务的情况下进行了测试,它正确地获得了这两个插件的位置

然而,当我关闭定位服务时,什么也看不到

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

document.addEventListener(“DeviceRady”,OnDevicerady,false);
函数ondevicerady(){
var Geo={};
if(导航器.地理位置){
log('startedlocation');
log(cordova.plugins.locationServices.geolocation.getCurrentPosition(成功,错误));
//navigator.geolocation.getCurrentPosition(成功,错误,{enableHighAccurance:true,maximumAge:Infinity,timeout:100000});
}
//得到纬度和经度;
功能成功(职位){
console.log(“成功位置”);
Geo.lat=位置坐标纬度;
Geo.lng=位置坐标经度;
填充集管(Geo.lat、Geo.lng);
}
函数错误(){
console.log(“地理编码器失败”);
}
功能填充集管(lat、lng){
$('#Lat').attr('data-Lat',Lat');
$('#Long').attr('data-Long',lng);
}
}
你说“当我关闭位置服务时”,我想你的意思是你进入了Android设置,并在设备上禁用了“位置历史记录”或关闭了共享“位置”。在这种情况下,您将无法获得任何数据,因为用户已选择不共享该信息。请参阅这两个插件的自述文件中的警告,这被认为是非常敏感的数据,因此,Android让用户能够控制共享这些信息

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

  • 用户已禁用位置数据的共享
  • 设备此时无法检索当前位置
  • 当前的“位置模式”不允许检索位置
然后再跟进一些建议,以改变或修正什么,以便收集和使用这些数据。当然,如果用户对与你的应用程序共享这些信息不感兴趣,你就必须优雅地遵守


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

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

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


和平

好的,很酷。那么,有没有一种方法可以让应用程序像其他应用程序一样打开位置数据设置以启用XDK?如果您正在使用的应用程序中还没有提供Cordova插件(我认为两者都只提供geo API),那么这就需要Cordova插件,或者需要巧妙地使用Intent(有插件)。搜索一个Cordova或PhoneGap插件,或者检查它在本机Java中是如何完成的,如果它可以有目的地完成(我不确定它是如何完成的)。如果必须用插件完成,您可以修改其中一个geo插件,添加额外的API调用来实现这一点——这些插件的优点之一是开源的。:)令人惊叹的。我确实有一个很好的老样子,但不能完全找到我在这方面寻找的东西,但我会深入挖掘,并在接下来的几个小时内报告回来。非常感谢你!有一个插件可以用来帮助检测位置服务是否可用,甚至可以帮助引导用户进入设备上的相关设置。查看您是否正在使用Android 6+工具进行构建,如果您正在使用使用旧构建工具的系统进行构建,请使用。
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);