地理位置不适用于Ionic 4 Android

时间:2019-02-07 09:51:59

标签: ionic-framework geolocation android-emulator ionic-native ionic4

要获取Android设备中的当前位置,我使用了Ionic 4 Geolocation插件,并按照文档中给出的步骤进行操作。在运行Ionic CLI命令ionic 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位置。在真实设备中尝试过,它也存在此类问题。

3 个答案:

答案 0 :(得分: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 / HTTPs的文档,并且在通过浏览器使用时也有警告。 我没有在设备(iOS和Android)上使用Geolocation,而是在完全按照Ionic文档的说明编写代码之后,并没有收到任何生命信号。我以为是由于Chrome 50上的地理位置(HTTP / HTTPs)问题造成的。

所以,我发现在设备(Android和iOS)上,地理位置工作正常,如果,您可以在平台准备就绪后开始使用它们(或使用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 :(得分:0)

              this.geolocation.getCurrentPosition().then((resp) => {
                console.log(resp);
                // resp.coords.latitude
                // resp.coords.longitude
            }).catch((error) => {
                console.log('Error getting location', error);
            });

我的问题一直是打电话给两次

当您反复打电话时,结果可能不会出现。 确保调用一次该函数。

答案 2 :(得分:-1)

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

这只是使用实时重新加载时的问题。

这将有效ionic cordova build android