如果定位服务关闭,Intel XDK Geolocation 将找不到 Lat/Long
Intel XDK Geolocation won't find Lat/Long if location services off
我正在使用英特尔 XDK 开发一个应用程序,我专门用 android (Nexus 6P) 进行测试。
我已经添加了 Cordova Geolocation 插件以及 Google Cordova 的定位服务,并在我的定位服务开启的情况下进行了测试,它正确地获得了两个插件的位置。
但是,当我关闭定位服务时,什么也没有出现。
这是我目前用来获取位置的代码:
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);
}
}
我想要的是一种要求用户打开位置数据的方法,或者更好的方法是在不需要位置服务的情况下获取用户的位置。
你说 "when I switch off location services" 我假设你的意思是你已经进入 Android 设置并禁用了 "Location History" 或关闭了设备上的共享 "Location"。在这种情况下,您不会获得任何数据,因为用户已选择不共享该信息。请参阅这两个插件的自述文件中的警告,这被认为是非常敏感的数据,因此,Android 已赋予用户控制共享此信息的能力。
我不知道是否有 API 可以明确告诉您该数据是否已被用户禁用。无论如何,您可能应该报告您无法获得所需的数据,这可能是由于多种原因造成的:
- 用户已禁用位置数据共享
- 设备此时无法检索当前位置
- 当前"location mode"不允许检索位置
然后提出一些关于更改或修复内容的建议,以便收集和使用该数据。当然,如果用户对与您的应用共享该信息不感兴趣,您必须优雅地遵守。
编辑 2017 年 2 月 23 日:请参阅下面的评论,了解一些有助于确定定位服务是否可用的插件。
你必须通过"options"来判断“超时”的时间所以return错误! =)
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 回调。如果未指定超时参数,则不会调用任何回调。
和平! =)
我正在使用英特尔 XDK 开发一个应用程序,我专门用 android (Nexus 6P) 进行测试。
我已经添加了 Cordova Geolocation 插件以及 Google Cordova 的定位服务,并在我的定位服务开启的情况下进行了测试,它正确地获得了两个插件的位置。
但是,当我关闭定位服务时,什么也没有出现。
这是我目前用来获取位置的代码:
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);
}
}
我想要的是一种要求用户打开位置数据的方法,或者更好的方法是在不需要位置服务的情况下获取用户的位置。
你说 "when I switch off location services" 我假设你的意思是你已经进入 Android 设置并禁用了 "Location History" 或关闭了设备上的共享 "Location"。在这种情况下,您不会获得任何数据,因为用户已选择不共享该信息。请参阅这两个插件的自述文件中的警告,这被认为是非常敏感的数据,因此,Android 已赋予用户控制共享此信息的能力。
我不知道是否有 API 可以明确告诉您该数据是否已被用户禁用。无论如何,您可能应该报告您无法获得所需的数据,这可能是由于多种原因造成的:
- 用户已禁用位置数据共享
- 设备此时无法检索当前位置
- 当前"location mode"不允许检索位置
然后提出一些关于更改或修复内容的建议,以便收集和使用该数据。当然,如果用户对与您的应用共享该信息不感兴趣,您必须优雅地遵守。
编辑 2017 年 2 月 23 日:请参阅下面的评论,了解一些有助于确定定位服务是否可用的插件。
你必须通过"options"来判断“超时”的时间所以return错误! =)
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 回调。如果未指定超时参数,则不会调用任何回调。
和平! =)