要获取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位置。尝试在真实设备中,它也有这样的问题。
在两个部分中,我将尝试提供帮助,我遇到了同样的两个问题,我解释了我是如何设法“修复”它们的,也许它也适用于你。
(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) => { ...
我认为关于所有背景的许多变量都可能使这个工作与否。就我而言,它就是这样发生的。
不安全(HTTP)上下文不推荐访问用户的位置。见https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features。
使用实时重新加载时,这只是一个问题。
这将工作ionic cordova build android