如何解决无法在 Android 11 上的 webview 中获取地理位置
我哪里错了?此代码适用于 Android 7..10,但不适用于 Android 11。HTML 提供访问错误
Android 清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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.INTERNET"/>
在地理定位请求的 webview 拦截中:
mbrowser.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback callback) {
callback.invoke(origin,true,false);
if (ContextCompat.checkSelfPermission(mycontext,android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED |
ContextCompat.checkSelfPermission(mycontext,android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED|
ContextCompat.checkSelfPermission(mycontext,Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS) != PackageManager.PERMISSION_GRANTED);{
AddToLog("Вывожу запрос на доступ к GPS если надо..");
checkPermission(Manifest.permission.ACCESS_FINE_LOCATION,100);
checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION,101);
checkPermission(Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,102);
};
callback.invoke(origin,false);
在 HTML 中:
navigator.geolocation.getCurrentPosition(
function(location) {
latitude=location.coords.latitude;
longitude=location.coords.longitude;
accuracy=location.coords.accuracy;
console.log("- WORK!")
},function(error){
console.log("- NOT WORK!")
},{enableHighAccuracy: true,timeout: 2000,maximumAge: 60000}
);
解决方法
请仅将此权限用于 android 10 及更高版本
Manifest.permission.ACCESS_BACKGROUND_LOCATION
,
结果是 Javascript 中的错误。在 Android 11 中,在 webview 中,方法“navigator.geolocation.getCurrentPosition”不起作用。 Android 7..11 的通用解决方案如下:
function fetchLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(onGeoSuccess,onGeoError)
} else {
console.log("- without transmitting geolocation ((")
}
}
function onGeoSuccess(event){
latitude=event.coords.latitude;
longitude=event.coords.longitude;
accuracy=event.coords.accuracy; //точность
console.log("- you can shoot coordinates in the browser method #2")
geosupport=true;
}
function onGeoError(event){
console.log("- without transmitting geolocation ((")
}
console.log("--test method 1");
navigator.geolocation.getCurrentPosition(
function(location) {
latitude=location.coords.latitude;
longitude=location.coords.longitude;
accuracy=location.coords.accuracy; //точность
console.log("- you can shoot coordinates in the browser method #2")
},function(error){
console.log("-test method 2");
fetchLocation();
},{enableHighAccuracy: true,timeout: 2000,maximumAge: 60000}
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。