3 回答
![?](http://img1.sycdn.imooc.com/545863c10001865402200220-100-100.jpg)
TA贡献1790条经验 获得超9个赞
必须在
WebView
使用中启用JavaScriptWebSettings.setJavaScriptEnabled(true);
该应用需要许可
ACCESS_FINE_LOCATION
在
WebView
必须使用自定义WebChromeClient
它实现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() );
![?](http://img1.sycdn.imooc.com/545847d40001cbef02200220-100-100.jpg)
TA贡献1852条经验 获得超1个赞
您是否在清单中声明了该许可?
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
您可能还需要声明其他位置权限,例如:
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
![?](http://img1.sycdn.imooc.com/5333a01a0001ee5302000200-100-100.jpg)
TA贡献1829条经验 获得超4个赞
接受或拒绝用户位置的对话框由程序员设计:D。正如Chris Cashwell所说,你只需使用这样的回调:
webview.setWebChromeClient(new WebChromeClient(){ public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { // callback.invoke(String origin, boolean allow, boolean remember); callback.invoke(origin, true, false); }}
在某些情况下,HTML5需要使用存储,您必须启用一些属性,以便webview具有正常运行的完全访问权限。
// HTML5 API flags webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setDomStorageEnabled(true);
- 3 回答
- 0 关注
- 657 浏览
添加回答
举报