Cordova 地理定位插件在 Android 上返回空位置对象

2023-11-23

我在使用 Geolocation Cordova 插件 (org.apache.cordova.geolocation) 时遇到了一些问题。它在 iOS 上运行良好,但在 Android 上则完全不行。

据我了解,该插件曾经包含本机 Android 代码,但在某些时候被删除,因为它有太多错误/速度太慢,而且本机 Web HTML5 实现更加稳定和快速。

如果我使用仍然具有本机代码的最新插件版本(0.3.2),它确实可以工作(但速度很慢,而且实际上并不总是如此)。但是当它返回时,位置对象总是被填充。

如果我使用最新的插件版本 (1.0.1),getCurrentPosition() 会立即返回一个空对象 ({})。它不会抛出错误。

如果我完全删除插件,然后手动将权限添加到Android项目中:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

同样的事情也会发生。我只是无法让它发挥作用,但这没有意义。 Android 控制台中不显示任何错误。有什么想法吗?


好吧,经过很长一段时间的调试,我发现了问题所在。显然,getCurrentPosition() 函数在 Android 中返回一个“特殊”对象,当使用 JSON.stringify() 时,该对象的计算结果为 {}。如果我将原始返回对象输出到控制台,结果发现它根本不是空的。

所以,下面荒谬的调整修复了我的代码:

navigator.geolocation.getCurrentPosition(function (position) {
    var positionObject = {};

    if ('coords' in position) {
        positionObject.coords = {};

        if ('latitude' in position.coords) {
            positionObject.coords.latitude = position.coords.latitude;
        }
        if ('longitude' in position.coords) {
            positionObject.coords.longitude = position.coords.longitude;
        }
        if ('accuracy' in position.coords) {
            positionObject.coords.accuracy = position.coords.accuracy;
        }
        if ('altitude' in position.coords) {
            positionObject.coords.altitude = position.coords.altitude;
        }
        if ('altitudeAccuracy' in position.coords) {
            positionObject.coords.altitudeAccuracy = position.coords.altitudeAccuracy;
        }
        if ('heading' in position.coords) {
            positionObject.coords.heading = position.coords.heading;
        }
        if ('speed' in position.coords) {
            positionObject.coords.speed = position.coords.speed;
        }
    }

    if ('timestamp' in position) {
        positionObject.timestamp = position.timestamp;
    }

    // Use the positionObject instead of the position 'object'
    alert(JSON.stringify(positionObject));            
}

iOS 无需进行上述调整即可正常工作,但由于我的应用程序是 Phonegap 应用程序,因此我始终应用上述调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cordova 地理定位插件在 Android 上返回空位置对象 的相关文章

随机推荐

  • 有没有类似 GhostDoc 的 C++ 工具

    当我使用 C 进行开发时 我大量使用 GhostDoc 来加快代码注释的过程 我目前正在开发一个 C 项目 但尚未找到等效的工具 我了解 Doxygen 但据我所知 它用于在代码外创建文档 而不是在代码中创建注释 有没有好的等效工具 我更喜
  • WPF:如何循环浏览窗口中的所有控件?

    如何循环遍历 WPF 窗口中的所有控件 我在MSDN 文档所以这有帮助 Enumerate all the descendants of the visual object static public void EnumVisual Vis
  • ImageIO.read() 返回 403 错误

    我有以下代码 public BufferedImage urlToImage String imageUrl throws MalformedURLException IOException URL url new URL imageUrl
  • 拦截JAX-RS请求:向tomcat注册ContainerRequestFilter

    我正在尝试通过 ContainerRequestFilter 拦截对我的 JAX RS Web 服务的请求 我想将它与自定义注释一起使用 这样我就可以装饰 Web 服务的某些方法 这应该使我能够根据是否在安全通道上发出的信息来处理对此方法的
  • uWSGI - Django 管理员的不同 Harakiri 超时

    是否可以将 Django 管理页面的 uWSGI 的 harakiri 超时设置为不同的 我有一个网站需要上传大文件 这可能需要 20 或 30 秒以上 但我希望全局 harakiri 超时更像 15 秒 因为我将数据发送回用户的方式 uW
  • 使用意图 URI 启动我的应用程序

    我知道这个问题已经在 StackOverflow 中被问过很多次了 但我还没有找到解决方案 我的应用程序发送一封电子邮件 其中包含一个链接 单击该链接后应启动该应用程序 根据 hackbod 的说法 最好的方法是使用 Intent URI
  • 启动 jupyter-lab 并从命令行打开特定笔记本?

    我正在编写一个 bash 脚本 最后启动 jupyter lab 并 理想情况下 打开一个特定的笔记本 在 jupyter 中 这很容易做到 jupyter notebook my folder my notebook ipynb 我找不到
  • 清除wpf中的数据网格值

    我需要冲洗我的datagrid每当一个treeviewitem被点击 我的代码如下 private void treeView1 SelectedItemChanged object sender RoutedPropertyChanged
  • 全局构造函数调用不在 .init_array 部分

    我正在尝试在嵌入式目标 ARM Cortex M3 上添加全局构造函数支持 假设我有以下代码 class foobar int i public foobar i 100 void inc i foobar foo int main foo
  • 在.NET中生成PDF文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在使用 C NET 2 0 我想生成一个 PDF 文件 我应该在文件中写一段文字 生成PDF需要满足哪些先决条件 任何简单的编码示例都会对我有帮
  • jQuery 文件上传在 IE 8 和 9 中不起作用

    此代码适用于 FF 和 chrome 在 IE 8 或 9 中 我收到 500 错误 指出非空属性为空 这是html div class fileupload buttonbar div
  • `f()` 和 `new f()` 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中的 new 关键字是什么 从 JS 闭包创建对象 我应该使用 new 关键字吗 看这段代码 function friend name return name name var
  • 使用jQuery获取url并提取url段

    在具有类别列表的网页上 每个类别标题都按以下格式链接 http localhost admin category unpublish 2 我编写了以下js代码 试图捕获url和段 unpublish action 和 2 id 并且需要将请
  • Windows 和 Linux 上 fopen 中“r+”的使用

    我正在摆弄一些打开 读取和修改文本文件的代码 一个快速 简化 的例子是 include
  • Vue.js 通过单击按钮打开模式

    如何使用按钮在其他组件中显示模态框 例如 我有以下组件 info vue
  • sklearns OMP 中的“字典中的线性相关性”异常

    我正在使用 sklearns正交匹配追踪使用由学习者学习的字典来获得信号的稀疏编码KSVD算法 但是 在拟合期间我收到以下运行时警告 usr local lib python2 7 dist packages sklearn linear
  • MSBuild ItemGroup 包含/排除模式问题

    问题 未根据排除属性中传递的值正确构建 ItemGroups 数组 如果您运行此脚本 它会创建一些示例文件 然后尝试根据包含 排除属性创建一个名为 TheFiles 的数组 问题是当排除不是硬编码或非常简单的属性时 它会出错 目标 Dyna
  • 如何使用 Web API 返回文件?

    我在用ASP NET Web API 我想从 API API 生成的 使用 C 下载 PDF 我可以让 API 返回一个byte 对于 C 应用程序 我可以这样做 byte pdf client DownloadData urlToAPI
  • 如何从 Android 应用程序打开 Viber 公共聊天

    我知道如何在 Viber 中与某个号码打开对话 如何从 Android 应用程序 新版本 发起 Viber 通话 但是如何打开公共聊天呢 有任何想法吗 提前致谢 这段 Kotlin 代码对我来说效果很好 val viberPackageNa
  • Cordova 地理定位插件在 Android 上返回空位置对象

    我在使用 Geolocation Cordova 插件 org apache cordova geolocation 时遇到了一些问题 它在 iOS 上运行良好 但在 Android 上则完全不行 据我了解 该插件曾经包含本机 Androi