android webview地理位置是怎样的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我必须检索用户的位置WebView。我用下面的Javascript来做到这一点:

function getLocation() {
   navigator.geolocation.getCurrentPosition(displayLocation, handleError);
}

我已经设置了这些设置:

ws.setJavaScriptEnabled(true);
ws.setGeolocationEnabled(true);
ws.setJavaScriptCanOpenWindowsAutomatically(true);

从内部访问用户位置的正确方法是WebView什么?

提问于
用户回答回答于

你是否在清单中声明了该权限:

<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" />
用户回答回答于
  • 必须在WebView使用JavaScript中启用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(...)。如果未设置数据库的位置,则持久性存储将不可用,但地理位置将继续正常运行,否则。要设置数据库的位置,请使用:

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

扫码关注云+社区