如果关闭位置服务,Phonegap build "deviceready" 事件永远不会触发

Posted

技术标签:

【中文标题】如果关闭位置服务,Phonegap build "deviceready" 事件永远不会触发【英文标题】:Phonegap build "deviceready" event never fires if the location service is turned off 【发布时间】:2013-06-03 16:07:13 【问题描述】:

我已经使用 JQM (1.3.1)、jQuery(1.9)、CSS3 和 javascript 编写了一个 web 应用程序,现在我正处于第二阶段,我正在使用 phone gap (2.7) 将此应用程序移植到 Apple 商店(目标 ios( 6.1)/iPhone5 - 问题可以在 iPhone 4S/iOS 6.0 上重现

如下所示的我的地理定位代码在浏览器中执行时运行良好。

var geoOptions =  'enableHighAccuracy': true, 'timeout': 10000, 'maximumAge': 0 ;
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);

function geoSuccess(postion)

  //on success code here    

function geoError(error)

  //on error code here    

但是,一旦通过 phonegap,我的应用就会两次请求用户访问定位服务的权限,即它显示了两次弹出窗口。因此,为了解决这个问题,我按照 *** 上的许多解决方案中的建议使用了下面的代码。

function onDeviceReady() 
 navigator.geolocation.getCurrentPosition(geoSuccess, geoError,geoOptions);


$(function() 
 document.addEventListener("deviceready", onDeviceReady, false);
);

这解决了弹出问题,但又开始了一个新问题。

问题:如果位置服务被禁用,我的代码会添加 deviceready 侦听器并等待 deviceready 事件触发,但该事件永远不会触发,它只是坐在那里。如果定位服务已打开,它将按预期工作。

以前有没有人遇到过这个问题,请您建议我您做了什么来解决它,请我已经投入了一天值得调试和研究的时间。

诚挚的问候,谢谢。

【问题讨论】:

大家好,有人要我吗? 【参考方案1】:

问题已解决! :)

事实证明,我没有完全按照 phonegap 构建文章中的描述包含 phonegap 库。

查看这篇文章https://build.phonegap.com/docs/preparing-your-app

您不需要在每个页面上都包含此库,而只需在索引页面上包含此库,我不确定它有何不同,但是在我删除任何其他上对 phonegap.js 的任何引用后,“deviceready”事件开始触发页面,但 index.html

我注意到的第二件事是,由于某种原因,我的错误处理如下所示在 phonegap 构建后停止工作。

switch(error.code) 

  case error.PERMISSION_DENIED:
   search.openPanelForSearch("Either the app was denied permission or the location srvice is currently turned off.", showInitialMap);
   break;
  case error.POSITION_UNAVAILABLE:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  case error.TIMEOUT:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case error.UNKNOWN_ERROR:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual serach instead?", showInitialMap);
   break;

我不得不把它改成下面

switch(error.code) 

  case 1:
   search.openPanelForSearch("Either the app was denied permission or the location service is currently turned off.", showInitialMap);
   break;
  case 2:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case 3:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  default:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual search instead?", showInitialMap);
   break;

希望这对某人有所帮助。谢谢。

【讨论】:

以上是关于如果关闭位置服务,Phonegap build "deviceready" 事件永远不会触发的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap Geolocation:如果应用程序关闭,则跟踪位置

Phonegap Build中的地理位置白屏

在 Apple 的 App Store 发布 Phonegap Build App - 体验? [关闭]

添加 config.xml 后,地理位置无法与 Phonegap Build 一起使用

通过 phonegap build 构建时,地理位置不起作用

黑莓中的Phonegap地理定位