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

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

【问题讨论】:

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

标签: javascript browser geolocation mobile-browser


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2010-12-29
    • 1970-01-01
    • 2023-01-14
    • 2013-10-15
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多