javascript - Geolocation API 不会在移动浏览器中提示位置
问题描述
地理定位 API 在 Web 浏览器中要求用户批准,这很容易处理,但在移动浏览器中,启用位置的提示在启用 GPS 之前不会显示。例如,提示“www.abc.com 需要您的位置”是否且仅当 GPS 开启时才会显示。有没有办法提示位置,即使 GPS 被禁用并通过该提示启用它?
解决方案
必须在 中启用 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() );
了解更多信息
推荐阅读
- c# - 使用 C# 读取 excel CSV 文件中的特定列
- sql-server - SQL Server 将小数 (18,2) 保存为 0,00 而不是 0.00
- java - 如何一次性保存父母和孩子(JPA & Hibernate)
- sql - Bigquery:使用 Group By 条件选择前 3 个
- javascript - 无法接收目标文件 Typeahead.js 中的值
- fortran - 英特尔 Fortran 编译器找不到模块“mpi”
- cron - 如何获取 cronjob 创建的作业日志?
- javascript - React Native 提取缓存不起作用(无法启用缓存)
- jenkins - Jenkins Junit Reporter 无法找到 xml 文件?
- ionic3 - 如何在 ionic 3 中实现 pushwoosh