Javascript 无法使用HTML5地理位置和具有不同用户的Android获取位置

Javascript 无法使用HTML5地理位置和具有不同用户的Android获取位置,javascript,android,html,webview,geolocation,Javascript,Android,Html,Webview,Geolocation,我正在为Android开发一个应用程序,它将运行在单一类型的设备上,即三星Galaxy Tab 3 8.0,运行在Android KitKat 4.4.2上 我们的设备上有多个用户、所有者和一个受限制的个人资料帐户,该帐户由我们公司的员工使用 我的应用程序有一个WebView,其中它从一个Web服务器加载我们的Web应用程序,该服务器在布局上响应,并且在登录请求时,我们要求访问者与HTML5地理位置共享他/她的位置 分享一个人的位置就像网络上的魅力一样(使用计算机上的浏览器或移动设备),在应用程

我正在为Android开发一个应用程序,它将运行在单一类型的设备上,即三星Galaxy Tab 3 8.0,运行在Android KitKat 4.4.2上

我们的设备上有多个用户、所有者和一个受限制的个人资料帐户,该帐户由我们公司的员工使用

我的应用程序有一个
WebView
,其中它从一个Web服务器加载我们的Web应用程序,该服务器在布局上响应,并且在登录请求时,我们要求访问者与HTML5地理位置共享他/她的位置

分享一个人的位置就像网络上的魅力一样(使用计算机上的浏览器或移动设备),在应用程序上,当所有者帐户启动它时,效果很好,等等

然而,如果我以受限配置文件帐户运行这个应用程序,我只会达到我在JavaScript中设置的超时时间,消息就会出现,并且不会发生其他任何事情

这是我调用共享位置的JavaScript:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(getPositionForMobileApp, getLocationErrorHandler, {frequency: 5000, maximumAge: 0, timeout: 60000, enableHighAccuracy: true});
} else {
    $('.panel-body').first().html('<small>Your browser doesn\'t support <strong>HTML5 Geolocation</strong>.<br /> Please install a newer version of your Internet Browser.</small>');
}
我将所有这些用于不同的目的;我不知道是否有人可能会撞到其他人或其他什么,但我需要所有这些

这是我的
onGeolocationPermissionsShowPrompt
方法覆盖:

mWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin, final GeolocationPermissions.Callback callback) {
        // I doubt that this is needed at all, but I've added it anyway
        GeolocationPermissions.getInstance().allow(origin);

        // as said, works well on other places...
        callback.invoke(origin, true, false);

        // after so much frustration, I've added the parent method.
        super.onGeolocationPermissionsShowPrompt(origin, callback);
    }
});

我什么都不知道了;我想不出来。

我最终解决了这个问题,但之前没有时间回答

因此,Android中的受限配置文件限制了使用HTML5地理定位API、浏览器通知和现代浏览器中的许多其他新功能

解决方案是避免对这些应用程序使用受限配置文件,这些应用程序在应用程序中实现HTML5地理定位API,主要是WebView

我们为用户提供了对系统/设备的完全访问权限,它可以完美地工作

我希望这将有助于任何人在未来


顺便说一下,我不确定这个问题是否在较新的Android版本中得到了解决,如
5.x
6
,但我确实希望是这样

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
mWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin, final GeolocationPermissions.Callback callback) {
        // I doubt that this is needed at all, but I've added it anyway
        GeolocationPermissions.getInstance().allow(origin);

        // as said, works well on other places...
        callback.invoke(origin, true, false);

        // after so much frustration, I've added the parent method.
        super.onGeolocationPermissionsShowPrompt(origin, callback);
    }
});