编程语言
首页 > 编程语言> > javascript-使用应用程序中嵌入的浏览器时,无法从Android上的网页访问地理位置

javascript-使用应用程序中嵌入的浏览器时,无法从Android上的网页访问地理位置

作者:互联网

我正在使用navigator.geolocation.getCurrentPosition()获取用户的当前位置.将这些网页上的位置功能直接加载到iOS和Android上的网络浏览器中时,效果很好.询问用户是否允许访问位置,该位置就从那里访问.不管哪个Web浏览器或OS都可以正常工作.

但是,如果在嵌入Android的应用程序(在这种情况下为TWebBrowser组件)中嵌入的Web浏览器中加载了相同的网页,则定位服务将不起作用.调用navigator.geolocation.getCurrentPosition()会导致Permission_denied错误消息.甚至没有询问用户是否允许访问位置;它只会引发Permission_denied错误.

我检查了一些明显的事情:

>代码前面是if(navigator.geolocation){,所以我知道
有地理定位功能.
>该应用的构建和部署具有位置服务的权限,当该应用访问代码中其他位置的位置服务(在浏览器外部,
那是).
>被拒绝的权限仅在网页嵌入到应用程序中嵌入的Web浏览器中时发生.
>仅在Android上发生. iOS运行正常.
>嵌入在应用程序中的Web浏览器将调用设备上可用的本机Web浏览器.也就是说,所使用的网络浏览器不是一些特殊的自定义浏览器.该应用程序是使用Delphi Firemonkey构建的,并使用TWebBrowser组件.

我一直在具有不同Android版本的多个Android设备(直到最新的v6)上进行了尝试,它们的行为都相同.这使我认为我正在遇到一些Android OS的“功能”.有没有解决的办法,因为我的应用程序功能还取决于从网页访问位置服务的能力.

解决方法是,从应用程序调用网页时,我会将当前位置传递给参数中的网页.但是当用户四处移动时,我无法使用WatchLocation更新地图上的位置.

解决方法:

您可以使用此代码先检查权限

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }

标签:twebbrowser,geolocation,javascript,android,delphi
来源: https://codeday.me/bug/20191119/2032486.html