无法通过 HTML5 Geolocation 和 Android 获得不同用户的位置
Unable to get location with HTML5 Geolocation and Android with different user
我正在为 Android 开发一个应用程序,它将 运行 在单一类型的设备上运行,即 - Samsung Galaxy Tab 3 8.0 - 运行ning 在 Android 奇巧 4.4.2.
我们的设备上有多个用户,所有者和我们公司员工使用的受限个人资料帐户。
我的应用程序有一个 WebView
,它从 Web 服务器加载我们的 Web 应用程序,该服务器在其布局中具有响应性,并且根据登录请求,我们要求访问者与 [= 共享 his/hers 位置53=] 地理位置。
共享一个人的位置在 Web 上就像一个魅力(使用计算机或移动设备上的浏览器),当所有者帐户启动它时在应用程序上工作正常,等等。
但是,如果我 运行 此应用程序作为受限配置文件帐户,我只会达到我在 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>');
}
JavaScript HTML5 地理位置 API 的回调是:
function getPositionForMobileApp(position) {
$('input#position').val(position.coords.latitude + ';' + position.coords.longitude);
$.post('/user/login?usingMobileApp=true', {position: (position.coords.latitude + ';' + position.coords.longitude)}, function (data) {
if (data.success) {
$('.panel-body').first().html(data.html);
// this is for testing/debugging purposes
$('.col-md-12.text-center small').html(position.coords.latitude + ' ----------- ' + position.coords.longitude);
$('input#login').focus();
} else {
$('.panel-body').first().html('<small><strong>Request is not valid!</strong><br /><br />We've blocked your IP Address: <kbd>' + data.ip + '</kbd> for next 24 hours.</small>');
}
}, 'json');
}
}
如前所述,这适用于计算机上的其他浏览器和移动设备上的浏览器,除非我 运行 我的 URL 来自移动设备上的 Chrome 浏览器,使用受限个人资料帐户 - 它甚至不会提示我 Chrome 是共享位置还是阻止它。
当我 运行 使用内置 Internet 浏览器应用程序时,它提示我,如果我接受,我会定期获得我的位置。
所以我相信这与 Samsung/Android 建立的用户限制有关,我不知道是谁了。
这些是我在 AndroidManifest.xml
:
中的权限
<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" />
我将所有这些用于不同的目的;我不知道是否有些人可能会与其他人发生碰撞或发生其他事情,但我需要所有这些。
这是我的 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、浏览器通知和 modern-day 中存在的许多其他新功能浏览器。
解决方案是避免对此类应用程序使用受限配置文件,这些应用程序在应用程序内实现 HTML5 地理定位 API,主要是 WebView。
我们为我们的用户提供了对 system/device 的完全访问权限,并且它运行完美。
我希望这对以后的任何人都有帮助。
顺便说一句,我不确定这个问题是否在 5.x
和 6
等较新的 Android 版本中得到解决,但我当然希望它是。
我正在为 Android 开发一个应用程序,它将 运行 在单一类型的设备上运行,即 - Samsung Galaxy Tab 3 8.0 - 运行ning 在 Android 奇巧 4.4.2.
我们的设备上有多个用户,所有者和我们公司员工使用的受限个人资料帐户。
我的应用程序有一个 WebView
,它从 Web 服务器加载我们的 Web 应用程序,该服务器在其布局中具有响应性,并且根据登录请求,我们要求访问者与 [= 共享 his/hers 位置53=] 地理位置。
共享一个人的位置在 Web 上就像一个魅力(使用计算机或移动设备上的浏览器),当所有者帐户启动它时在应用程序上工作正常,等等。
但是,如果我 运行 此应用程序作为受限配置文件帐户,我只会达到我在 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>');
}
JavaScript HTML5 地理位置 API 的回调是:
function getPositionForMobileApp(position) {
$('input#position').val(position.coords.latitude + ';' + position.coords.longitude);
$.post('/user/login?usingMobileApp=true', {position: (position.coords.latitude + ';' + position.coords.longitude)}, function (data) {
if (data.success) {
$('.panel-body').first().html(data.html);
// this is for testing/debugging purposes
$('.col-md-12.text-center small').html(position.coords.latitude + ' ----------- ' + position.coords.longitude);
$('input#login').focus();
} else {
$('.panel-body').first().html('<small><strong>Request is not valid!</strong><br /><br />We've blocked your IP Address: <kbd>' + data.ip + '</kbd> for next 24 hours.</small>');
}
}, 'json');
}
}
如前所述,这适用于计算机上的其他浏览器和移动设备上的浏览器,除非我 运行 我的 URL 来自移动设备上的 Chrome 浏览器,使用受限个人资料帐户 - 它甚至不会提示我 Chrome 是共享位置还是阻止它。
当我 运行 使用内置 Internet 浏览器应用程序时,它提示我,如果我接受,我会定期获得我的位置。
所以我相信这与 Samsung/Android 建立的用户限制有关,我不知道是谁了。
这些是我在 AndroidManifest.xml
:
<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" />
我将所有这些用于不同的目的;我不知道是否有些人可能会与其他人发生碰撞或发生其他事情,但我需要所有这些。
这是我的 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、浏览器通知和 modern-day 中存在的许多其他新功能浏览器。
解决方案是避免对此类应用程序使用受限配置文件,这些应用程序在应用程序内实现 HTML5 地理定位 API,主要是 WebView。
我们为我们的用户提供了对 system/device 的完全访问权限,并且它运行完美。
我希望这对以后的任何人都有帮助。
顺便说一句,我不确定这个问题是否在 5.x
和 6
等较新的 Android 版本中得到解决,但我当然希望它是。