Android WebView 地理位置不起作用

Posted

技术标签:

【中文标题】Android WebView 地理位置不起作用【英文标题】:Android WebView geolocation not working 【发布时间】:2015-08-21 13:26:48 【问题描述】:

我的应用程序正在显示一个WebView,它正在请求用户的地理位置。我的WebChromeClient 中的onGeolocationPermissionsShowPrompt 回调被调用,但JS 回调从未被调用作为响应。这是我的 Java 代码:

protected void onCreate(Bundle savedInstanceState) 
    // Binding views…

    webview.getSettings().setjavascriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.getSettings().setGeolocationEnabled(true);
    webview.setWebChromeClient(new GeoWebChromeClient());

    webview.loadUrl(BASE_URL);


private class GeoWebChromeClient extends WebChromeClient 
    @Override
    @DebugLog
    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) 
        callback.invoke(origin, true, true);
    

正如预期的那样,onGeolocationPermissionsShowPrompt 被调用一次,网页第一次请求用户的位置,然后不再被调用。但无论是在第一个或随后的位置请求上,JS 回调都不会被调用。

编辑:我刚刚用另一个请求后台位置的应用程序进行了测试。有效。我的应用程序具有以下权限(我很确定它们中的大多数对此毫无用处,但是……):

<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.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

【问题讨论】:

包括 gps 权限并确保 gps 处于开启状态。 GPS 已开启并适用于 Google 地图等其他应用程序。我在问题中添加了相关权限。 你的问题解决了吗。我有同样的问题 @ArdaKazancı 对不起,我不再从事这个项目了。我不知道它是如何解决的——如果它已经解决了。 【参考方案1】:

是的,这是真的:onGeolocationPermissionsShowPrompt 被调用一次,网页第一次请求用户的位置,然后它就不再被调用了。 我也面临同样的问题。一种解决方法是在授予位置权限后重新加载页面。

【讨论】:

以上是关于Android WebView 地理位置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置

navigator.permissions.query 在 android/ios webview 中不起作用

我的Android进阶之旅------&gt;Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

Android主线程阻塞WebView线程

Android 浮动按钮和高级 webview 不起作用

WebView.loadData 在 Android 9.0 (API-29) 上不起作用