为了账号安全,请及时绑定邮箱和手机立即绑定

android webview地理定位

android webview地理定位

慕桂英546537 2019-07-31 18:11:14
android webview地理定位我必须在a中检索用户的位置WebView。我使用以下Javascript执行此操作:function getLocation() {    navigator.geolocation.getCurrentPosition(displayLocation, handleError);}但是权限请求弹出窗口永远不会打开。我设置了这些设置:ws.setJavaScriptEnabled(true);ws.setGeolocationEnabled(true);ws.setJavaScriptCanOpenWindowsAutomatically(true);从一个位置访问用户位置的正确方法是WebView什么?
查看完整描述

3 回答

?
富国沪深

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() );



查看完整回答
反对 回复 2019-07-31
?
小怪兽爱吃肉

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" />


查看完整回答
反对 回复 2019-07-31
?
浮云间

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);


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 657 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信