uni-app uni.getLocation在第一次进入app进行授权时无法触发

uni-app uni.getLocation在第一次进入app进行授权时无法触发

开发环境 版本号 项目创建方式
Mac 12.0.1 HBuilderX

示例代码:

onLoad() {  
    uni.getLocation({  
        complete: () => {  

        },  
        success: () => {  

        },  
        fail: () => {  

        }  
    })  
}

操作步骤:

  • 第一次进入App时,点击允许

预期结果:

  • success或fail执行

实际结果:

  • 点击允许后 success和fail和complete都不执行

bug描述:

在第一次进入App的时候,出现授权弹窗,允许后,不触发success和fail和complete,如果是不允许,是可以触发fail和complete的。


更多关于uni-app uni.getLocation在第一次进入app进行授权时无法触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

如果没有授权,是不会执行getLocation方法的。假设点击 授权 ,此时不会回调的。 你应该这样做,设置一个定时器,不断执行。直到拿到 成功回调的值后,就删除定时器。

更多关于uni-app uni.getLocation在第一次进入app进行授权时无法触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


问题是 我点击授权,无反应,但是点击不允许,是拿得到fail回调,很奇怪

这是一个典型的权限请求时序问题。在首次启动应用时,系统权限弹窗会中断JavaScript执行流,导致uni.getLocation的回调无法正常触发。

解决方案:

  1. 延迟调用(推荐):
onLoad() {
    setTimeout(() => {
        uni.getLocation({
            success: (res) => {
                console.log('定位成功', res)
            },
            fail: (err) => {
                console.log('定位失败', err)
            }
        })
    }, 500)
}

给权限弹窗留出显示时间,确保回调能正常绑定。

  1. 使用条件编译处理平台差异
onLoad() {
    // #ifdef APP-PLUS
    setTimeout(() => {
        this.requestLocation()
    }, 500)
    // #endif
    
    // #ifndef APP-PLUS
    this.requestLocation()
    // #endif
}

requestLocation() {
    uni.getLocation({
        success: (res) => {
            console.log('定位成功', res)
        },
        fail: (err) => {
            console.log('定位失败', err)
        }
    })
}
  1. 检查manifest.json配置: 确保已正确配置定位权限:
{
    "app-plus": {
        "distribute": {
            "ios": {
                "permissions": {
                    "Location": {
                        "desc": "获取位置信息"
                    }
                }
            },
            "android": {
                "permissions": [
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>"
                ]
            }
        }
    }
}
回到顶部