地理定位不适用于科尔多瓦

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 吗?

以上是关于地理定位不适用于科尔多瓦的主要内容,如果未能解决你的问题,请参考以下文章

后台地理定位插件不适用于 Android 版本

Javascript地理定位不适用于更新的android chrome

Phonegap 2.5.0 地理定位不适用于 android 4.0.4

电容器 - 地理定位不适用于 iOS,但适用于 Android

地理定位不适用于webview android

科尔多瓦后台地理定位支持,一段时间后没有应用程序终止