地理位置在Ionic 4 Android中不起作用

问题描述 投票:2回答:2

要获取Android设备中的当前位置,我使用了Ionic 4 Geolocation插件,并按照文档中给出的步骤操作。在运行Ionic CLI命令离子cordova运行android --l --c时,它启动应用程序并提示位置权限对话框。但它抛出了像getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin.这样的错误

{
   PositionErrorcode: 1message: "Only secure origins are allowed ."__proto__: PositionError
   home.page.ts:37Error getting location PositionError
}

在阅读了论坛中的博客和主题之后,我只使用了cli命令ionic cordova run android(没有重新加载)。在那种情况下,应用程序没有加载,因为源没有正确加载。

Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///polyfills.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///styles.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///cordova.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///vendor.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///main.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///assets/icon/favicon.png Failed to load resource: net::ERR_FILE_NOT_FOUND

我还尝试使用模拟器扩展控件在模拟器中设置gps位置。尝试在真实设备中,它也有这样的问题。

ionic-framework geolocation android-emulator ionic-native ionic4
2个回答
0
投票

在两个部分中,我将尝试提供帮助,我遇到了同样的两个问题,我解释了我是如何设法“修复”它们的,也许它也适用于你。

(1)关于这个错误:

Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///polyfills.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///styles.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///cordova.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///vendor.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///main.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///assets/icon/favicon.png Failed to load resource: net::ERR_FILE_NOT_FOUND

老实说,我不确定究竟是什么造成了这种情况,我仍在调查根本原因,因为我有这个问题,以防它回来。奇怪的是,我有Android的这个问题,但没有iOS平台。我为解决这个问题所做的工作是擦除所有插件并再次安装它们:

// Inside your app's folder
$ rm -rf plugins 
// Just in case (I didn't do it, but who knows!) remove and add the platform again
$ ionic cordova platform remove android
$ ionic cordova platform add android

之后,这些错误就消失了。

(2)关于地理位置

是的,这是真的,我阅读了有关HTTP / HTTP的文档,并且在通过浏览器使用时也有警告。我没有让Geolocation在设备(iOS和Android)上工作,在完全按照Ionic的文档所说的编写代码后,它根本没有得到任何生命信号。我认为这是因为Chrome 50上的Geolocation(HTTP / HTTPs)问题。

所以,我发现在设备(Android和iOS)上Geolocation工作正常,如果你在平台准备就绪后启动它们(或者使用Timeout参数,作为替代)。使设备获取用户位置的代码如下:

   this.platform.ready().then(() => {
        this.geolocation.getCurrentPosition().then((loc) => {
              userLatitude  = loc.coords.latitude;
              userLongitude = loc.coords.longitude;
              map.flyTo({userLatitude:userLongitude}, MAX_ZOOM - 2, ZOOM_PAN_OPTIONS);
        }).catch((error) => {
            this.utils.error('Error getting location: ' + error.message);
        }); 
   };

我没有测试,但其他替代方案可能是在方法上使用Timeout参数:

this.geolocation.getCurrentPosition({ timeout: 30000 }).then((loc) => { ...

我认为关于所有背景的许多变量都可能使这个工作与否。就我而言,它就是这样发生的。


-1
投票

不安全(HTTP)上下文不推荐访问用户的位置。见https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features

使用实时重新加载时,这只是一个问题。

这将工作ionic cordova build android

© www.soinside.com 2019 - 2024. All rights reserved.