Geolocation API 不会在移动浏览器中提示位置

Posted

技术标签:

【中文标题】Geolocation API 不会在移动浏览器中提示位置【英文标题】:Geolocation API doesn't prompt for location in mobile browser 【发布时间】:2018-11-19 10:34:07 【问题描述】:

Geolocation API 在网络浏览器中要求用户批准,这很容易处理,但在移动浏览器中,启用位置的提示在启用 GPS 之前不会显示。例如,提示“www.abc.com 需要您的位置”是否且仅当 GPS 开启时才会显示。即使 GPS 被禁用并通过该提示启用它,有没有办法提示位置?

【问题讨论】:

link 你想在你的应用程序中使用这个吗? 不,不在应用浏览器中。我需要为默认的 android 浏览器和其他浏览器(如 chrome、firefox、opera mini 等)执行此操作。 link你是说这个吗? 是的,你说得对。 【参考方案1】:

必须在 WebView 中启用 javascript,使用 WebSettings.setJavaScriptEnabled(true);

应用需要权限ACCESS_FINE_LOCATION

WebView 必须使用实现 WebChromeClient.onGeolocationPermissionsShowPrompt() 的自定义 WebChromeClient。此方法由WebView 调用以获取向 JavaScript 公开用户位置的权限。 (在浏览器的情况下,我们向用户显示一个提示。)默认实现什么都不做,所以永远不会获得许可,也永远不会将位置传递给 JavaScript。一个总是授予权限的简单实现是

webView.setWebChromeClient(new WebChromeClient() public void onGeolocationPermissionsShowPrompt(字符串来源,GeolocationPermissions.Callback 回调) callback.invoke(origin, true, false); );

地理定位使用数据库在会话之间保持缓存的位置和权限。使用 WebSettings.setGeolocationDatabasePath(...) 设置数据库的位置。如果未设置数据库的位置,则持久存储将不可用,但 Geolocation 将继续正常工作,否则。要设置数据库的位置,请使用

webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );

更多信息

link1 link2

【讨论】:

以上是关于Geolocation API 不会在移动浏览器中提示位置的主要内容,如果未能解决你的问题,请参考以下文章

地理位置API不适用于移动设备

地理位置(Geolocation)API 简介

当 Mac 设置(不是浏览器设置)拒绝位置共享时,HTML5 Geolocation API 悄然失败

在没有 Google API 的情况下使用浏览器 GeoLocation?

geolocation.getCurrentPosition 在晚上失败——如何提供自己的 api 密钥?

我正在使用 geolocation() api,但 JSON 没有通过