首页 > 解决方案 > Geolocation API 不会在移动浏览器中提示位置

问题描述

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

标签: javascriptbrowsergeolocationmobile-browser

解决方案


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

  • 该应用程序需要权限ACCESS_FINE_LOCATION

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

    webView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } });

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

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

了解更多信息

链接1 链接 2


推荐阅读