【问题标题】:Confirming Location Access in CoronaSDK在 CoronaSDK 中确认位置访问
【发布时间】:2012-01-03 10:46:16
【问题描述】:

是否有任何方法可以直接请求访问用户的位置,或者是否有某种事件监听器会在授予位置访问权限后通知我?我在将 MapView 对象与 Director 类一起使用时遇到了问题,我认为这取决于此。

我有一个包含 MapView 组件的辅助视图。当导演类切换到该视图时,我的 MapView 对象被实例化,我尝试获取用户的位置。我遇到的问题是,在我的测试设备(iPhone 4)上,访问用户位置的尝试发生在他们授予我位置访问权限之前,所以只有当他们离开该屏幕并稍后返回它时(实例化再次在 Director 库中),我可以使用他们的位置。

这显然不能令人满意。

有什么帮助/建议吗?

【问题讨论】:

    标签: mobile gps lua location coronasdk


    【解决方案1】:

    您的问题的解决方案很大程度上取决于您的代码。如果您想获得帮助,您应该明确地将相关代码位包含在您的 SO 问题中。

    我将进行猜测并假设您的代码看起来类似于 MapView 示例:

    http://developer.anscamobile.com/reference/index/nativenewmapview

    如果是这样的话,问题是位置检索很晚。

    local function callMap()
            -- Fetch the user's current location
            -- Note: in XCode Simulator, the current location defaults to Apple headquarters in Cupertino, CA
            local currentLocation = myMap:getUserLocation()
            local currentLatitude = currentLocation.latitude
            local currentLongitude = currentLocation.longitude
            ...
    

    您想要的是之前执行的代码。理想情况下,当应用程序启动时。用户将立即收到“此应用程序想要访问 GPS”消息,因此在查看地图视图之前,他们将有更多时间“批准”。

    您可以做的另一件事是使用缓存。将最新的已知位置存储在某处(配置文件或数据库,取决于您的设置)。当连接丢失或尚未恢复时,在地图上显示最后一个已知位置。

    【讨论】:

    • 澄清一下,真正的问题是,在我尝试获取用户位置之前,我无法确定用户是否已授予位置访问权限。我想知道是否可以使用事件、回调或类似性质的东西来响应用户对我的位置访问请求的批准。
    • 看起来不是这样的。当 gps 访问被禁用时,您得到的纬度和经度是多少?
    • 另外,请尝试检查位置事件中的event.isError 字段。也许你可以使用它。在developer.anscamobile.com/partner/mapview底部引用
    • 也许我应该进一步澄清/更准确。我为“mapAddress”事件添加了一个运行时监听器。当用户访问有问题的屏幕时,会实例化一个 MapView,然后我尝试调用 map:getUserLocation()。因为他们还没有授予我位置访问权限,所以对 getUserLocation 的调用似乎静默失败,并且永远不会调用“mapAddress”事件侦听器。在授予我位置访问权限后,如果他们离开屏幕并返回屏幕(从而实例化一个 new mapView,重新启动整个过程),我的事件监听器将被触发。
    • 我明白这一点。这就是我告诉你的原因 - 请求用户位置一次,就在你的程序启动时。即使用户从不创建 mapView。再加上缓存最后一个已知位置,你就已经很好了。
    猜你喜欢
    • 2012-12-24
    • 2010-10-10
    • 2023-04-06
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2022-01-10
    相关资源
    最近更新 更多