要获取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位置。在真实设备中尝试过,它也存在此类问题。
答案 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