gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:27 24 4
gpt4 key购买 nike

我正在使用 navigator.geolocation.getCurrentPosition() 获取用户的当前位置。当直接加载到 iOS 和 Android 的网络浏览器中时,这些网页上的位置功能可以正常工作。系统会询问用户是否允许访问位置,然后从那里开始。无论是哪种网络浏览器或操作系统,它们都可以正常工作。

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

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

  • 代码前面有 if (navigator.geolocation) { 所以我知道有地理定位功能。
  • 该应用是在获得定位服务权限的情况下构建和部署的,当应用在代码中的其他位置(浏览器之外,那是)。
  • 只有当网页加载到应用程序中嵌入的网络浏览器中时,才会在网页中发生权限被拒绝的情况。
  • 它只发生在 Android 上。 iOS 工作正常。
  • 应用中嵌入的网络浏览器调用设备上可用的 native 网络浏览器。也就是说,正在使用的网络浏览器不是一些特殊定制的浏览器。该应用程序使用 Delphi Firemonkey 构建,并使用 TWebBrowser 组件。

我在多款 Android 设备上试过,一直到最新的 v6,它们的行为都一样。这让我认为我遇到了一些 Android 操作系统“功能”。有什么办法可以解决这个问题,因为我的应用程序功能也取决于从网页访问定位服务。

作为一种解决方法,我在从应用程序调用时将当前位置传递给参数中的网页。但是当用户四处移动时,我无法使用 WatchLocation 来更新 map 上的位置。

最佳答案

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

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;
}

关于javascript - 使用应用程序中嵌入的浏览器时,无法从 Android 上的网页访问地理位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com