我正在使用navigator.geolocation.getCurrentPosition()
来获取用户的当前位置。当直接加载到iOS和Android上的Web浏览器中时,这些网页上的位置功能可以正常工作。系统会询问用户是否允许访问位置,并从那里开始访问。无论哪个Web浏览器或操作系统 - 它们都可以正常工作。
但是,如果在Android上运行的应用中嵌入的网络浏览器中加载了相同的网页(在本例中为TWebBrowser组件),则位置服务不起作用。致电navigator.geolocation.getCurrentPosition()
会导致permission_denied
错误消息。甚至不询问用户是否允许访问位置;它只会引发permission_denied错误。
我检查了一些显而易见的事情:
if (navigator.geolocation) {
,所以我知道
有地理定位能力。 我在几款Android设备上试用了不同的Android版本,一直到最新的v6,它们的行为都一样。这让我觉得我遇到了一些Android操作系统“功能”。有没有办法绕过它,因为我的应用程序功能也依赖于从网页访问位置服务。
作为一种解决方法,我在从应用程序调用它时将当前位置传递给参数中的网页。但是当用户四处移动时,我无法使用WatchLocation来更新地图上的位置。
答案 0 :(得分:3)
您可以使用此代码首先检查权限
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;
}