地理定位不适用于科尔多瓦
Posted
技术标签:
【中文标题】地理定位不适用于科尔多瓦【英文标题】:Geolocation doesn't work with cordova 【发布时间】:2016-01-24 15:50:59 【问题描述】:我目前正在使用英特尔 XDK 开发一个移动应用程序(在后台最后是 Cordova,这就是我将 Cordova 放在标题中的原因。)
通过 Ajax 请求,我得到了一些地址,我想通过这些地址计算它们与用户当前位置之间的距离。
所以,我得到地址,我转换它们,然后我做出改变。
但实际上,没有任何效果!
function codeAddress(id, addresse)
geocoder.geocode( 'address': addresse, function(results, status)
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
setTimeout(function(), 100);
console.log(id);
console.log(addresse);
//document.addEventListener("intel.xdk.device.ready",function()
if (navigator.geolocation)
if (status == google.maps.GeocoderStatus.OK)
navigator.geolocation.getCurrentPosition(function(position)
addressEvent = results[0].geometry.location;
var pos =
lat: position.coords.latitude,
lng: position.coords.longitude
;
var position = new google.maps.LatLng(pos.lat, pos.lng)
var resultat = google.maps.geometry.spherical.computeDistanceBetween(addressEvent, position);
console.log(resultat);
console.log(addressEvent);
console.log(pos);
console.log(position);
var convert = Math.floor(resultat);
var finalConvert = convert + " m";
var distance = document.createElement('span');
distance.innerhtml = finalConvert;
distance.className = "geo";
document.getElementsByClassName('meta-info-geo')[id].appendChild(distance);
, function()
handleLocationError(true, infoWindow);
);
//,false);
);
在 console.log(id)、console.log(addresse) 中,我有结果!
实际上我得到了 4 个 ID 和 4 个地址。
我检查了我可以在 *** 上找到的所有主题,我通常必须在 // 中添加行与 addEventListener 但它没有任何改变。
有人知道如何改变吗?
ps:当然,cordova geoloc 正在构建中,并且已授予权限!
编辑:我的目标是 android 4.0 min 和 ios 5.1.1。我正在使用 SDK。
编辑 2:
【问题讨论】:
请在您的帖子中回答以下问题。因为这似乎是您在 Cordova 上的第一篇文章。这是您的第一个混合应用程序吗?您的目标平台及其目标版本是什么?安卓4、5、6? iOS 7、8、9?你在使用CLI, SDK or Build 吗?请不要假设答案,请阅读链接。一旦您回答了帖子中的问题,请在 cmets 中回复,以便我知道您已在帖子中添加信息。 我刚做了。但正如我在另一篇文章中回答的那样,我的代码正在运行,只是 document.addEventListener 不起作用:) 嗯.... 您很可能对 Cordova/Phonegap 的工作方式存在根本性的误解。这很容易发生,因为近年来 Cordova/Phonegap 正在使用 HTML5 API - 如果可能的话。因此,您可能有一个 HTML5 应用程序,但没有一个 Cordova/Phonegap 应用程序。您的代码是否公开发布在某个地方以便我查看? FWIW:您的document.addEventListener
问题可能是因为这种误解。
@JesseMonroy650 在我的英特尔 XDK 项目中,项目类型为:HTML5 + Cordova 开始于:导入。所以我想没关系?但我没有任何cordova.js或其他任何东西(如intelxdk.js)
你的代码在哪里,让我看看?
【参考方案1】:
由于here 和here 所表达的各种原因,地理位置经常无法按人们期望的方式工作。
您可以使用 XDK 中的“Hello, Cordova”示例应用程序和 available on GitHub 来试验地理。尝试在各种设备上使用它,看看它是如何工作的。按“精细”按钮为“精细”位置启动单个地理呼叫,按“粗略”按钮为“粗糙”位置启动单个地理呼叫。按下“watch”按钮以启动对一系列地理数据点的请求(通过先按下单个按钮设置为粗略或精细)。
您在“模拟”选项卡中获得的行为将与您在真实设备上获得的行为显着不同。设备类型(Android、iOS 等)和该设备的版本会影响您的结果;设备制造商和您的位置(内部或外部)将影响您的结果。不要假设调用地理 API 将始终为您提供即时和可靠的数据,地理定位硬件不会那样工作......事实上,您甚至不能假设您甚至可以获得有效的结果!出于某些原因,请参阅我在帖子前面指出的两个链接。
【讨论】:
感谢您的提示! :) 实际上我只是改变了几行,它工作正常。我遇到的唯一问题是 iOS 上 geoloc 的双重提示。我需要使用这一行:(//document.addEventListener("intel.xdk.device.ready",function()) 但我不明白他为什么不工作=/ 你需要包含geo插件来消除双重提示。我不明白为什么,但这为我解决了这个问题。但这意味着您需要等待 deviceready 事件(又名 Cordova Ready),然后才能访问任何地理功能。不要使用该 intel.xdk.device.ready 事件,它已被弃用,请使用 Cordova 提供的标准“deviceready”。 我刚刚编辑了我的第一篇文章,您可以看到它已经包含在项目中。我使用了 intel.xdk.device 因为当我创建我的项目时,我从来没有找到 cordova.js 所以我不能使用 deviceready ...cordova.js
是一个“幻像文件”——它不存在于您的项目中,它是在构建和调试阶段添加的,因为需要对其进行自定义以匹配您的项目。请参阅“Hello, Cordova”示例中index.html
文件中的 cmets,我也向您指出了更多详细信息。
所以我只需要在 intex.html 或我正在使用 deviceready 的所有文件中添加 Cordova.js 吗?以上是关于地理定位不适用于科尔多瓦的主要内容,如果未能解决你的问题,请参考以下文章
Javascript地理定位不适用于更新的android chrome
Phonegap 2.5.0 地理定位不适用于 android 4.0.4