【发布时间】:2018-11-19 10:34:07
【问题描述】:
Geolocation API 在网络浏览器中要求用户批准,这很容易处理,但在移动浏览器中,启用位置的提示在启用 GPS 之前不会显示。例如,提示“www.abc.com 需要您的位置”是否且仅当 GPS 开启时才会显示。即使 GPS 被禁用并通过该提示启用它,有没有办法提示位置?
【问题讨论】:
标签: javascript browser geolocation mobile-browser
Geolocation API 在网络浏览器中要求用户批准,这很容易处理,但在移动浏览器中,启用位置的提示在启用 GPS 之前不会显示。例如,提示“www.abc.com 需要您的位置”是否且仅当 GPS 开启时才会显示。即使 GPS 被禁用并通过该提示启用它,有没有办法提示位置?
【问题讨论】:
标签: javascript browser geolocation mobile-browser
必须在 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() );
更多信息
【讨论】: