离子混合移动应用程序获取设备位置

Posted

技术标签:

【中文标题】离子混合移动应用程序获取设备位置【英文标题】:Ionic hybrid mobile app get device location 【发布时间】:2018-05-29 17:08:17 【问题描述】:

我们正在使用 Ionic/Cordova 和 Angular 5 开发移动应用程序。我们必须根据设备设置的区域设置以公制或英制显示距离。在应用程序的那个时候,我们已经有了一个以米为单位的值,我们必须相应地进行转换。

我们不想进行另一个网络调用,因此必须从设备中提取语言环境。

我们的技术堆栈是否有内置方式来执行此操作,或者是否有用于提取设备设置的插件?

我们使用:

离子 3 角 5 打字稿 2.4 cordova-android 6.3 cordova-ios 4.5.4

我找到了这个https://angular.io/guide/i18n 指南,我们更愿意使用LOCALE_ID,但这不是必须的。

【问题讨论】:

澄清:我们只想知道用户的手机是否设置为美国地区,因此我们可以决定向他显示英制或公制单位。 【参考方案1】:

我们找到了一种解决方案,它可以在移动设备上运行,而无需进行其他网络调用。第一行从设备设置中读取区域设置,第二行提取区域设置的国家/地区。

不幸的是,这在浏览器中并不可靠,但对于我们仅用于移动设备的用例来说已经足够了。

const locale = window.navigator.language;
const country = locale.split('-')[1];

【讨论】:

是的,我试过了。它给出了类似“en-US”的内容。对我来说,我的语言是 en-US,但我的国家是印度。 (这种方式失败了)让我知道是否有其他解决方法。【参考方案2】:
   if ("geolocation" in navigator) 
      navigator.geolocation.getCurrentPosition((position) => 
        //this.latitude = position.coords.latitude;
        //this.longitude = position.coords.longitude;
      );
    

【讨论】:

【参考方案3】:

使用新的navigator 对象(您正在创建一个混合应用程序,我假设您已经更新了您的浏览器版本)

let lang = navigator.language || navigator.userLanguage; // Language
let showPosition = (position) => 
  position.coords.latitude;
  position.coords.longitude; 

navigator.geolocation.getCurrentPosition(showPosition); // Geoposition

【讨论】:

我们不想再进行网络调用,我们需要本地设备设置 对不起,什么?这是您给出并标记为已解决的确切答案,这里绝对没有网络呼叫。我不欣赏这种行为...... 您的回答似乎完全有效,但对于我们的用例来说太具体了。我们不需要位置,我们只需要设备设置的国家/地区。请参阅我的说明并感谢您的努力 您的澄清是我的回答。这是我提供的代码的第一行。我给你地理定位是因为你可以将你的单位系统基于位置而不是语言偏好(例如,在美国,你显示英制单位)。你其实是说我给你的答案太多了,所以不是你问的?

以上是关于离子混合移动应用程序获取设备位置的主要内容,如果未能解决你的问题,请参考以下文章

使用此命令在移动设备中运行离子应用程序时出错(离子科尔多瓦运行安卓)

如何在真实设备中使用离子运行移动应用程序

如何使用离子电容器将事件添加到移动设备的日历

Phonegap混合应用程序 - 设备兼容性

移动设备:获取位置

使用 Ionic 开发 IBM MobileFirst Platform 混合应用程序