微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Android 11 上的 webview 中获取地理位置

如何解决无法在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?