uni-app 安卓真机调试时,第一次位置权限授权plus.geolocation.getCurrentPosition API不执行

uni-app 安卓真机调试时,第一次位置权限授权plus.geolocation.getCurrentPosition API不执行

开发环境 版本号 项目创建方式
Windows Windiws10 ltsc HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.1.12

手机系统:Android

手机系统版本号:Android 10

手机厂商:一加

手机机型:一加5

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

操作步骤:

onShow() {
uni.getLocation({
type: “gcj02”,
success: (res) =>{
const {
latitude,
longitude,
errMsg
} = res
if (errMsg == “getLocation:ok”) {
this.longitude = longitude this.latitude = latitude
} else {
this.longitude = 116.39742 this.latitude = 39.909
}
},
fail: (err) =>{
this.longitude = 116.39742 this.latitude = 39.909
}
})
},

onReady() {

const map = uni.createMapContext("gdmap", this) ;  
this.map = map.$getAppMap();  

http.request(data).then((res) =>{  

    const {  
        longitude,  
        latitude  
    } = res  

    plus.geolocation.getCurrentPosition((position) =>{  
        console.log('执行了吗?', position)  
    },  
    (error) =>{  
        console.log("111", error)  
    },  
    {  
        geocode: true  
    })  

})  

}


### 预期结果:

位置授权后,会执行下面代码的


plus.geolocation.getCurrentPosition((position) => {  
    console.log('执行了吗?',position)  
},(error)=>{  
  console.log("111",error)  
},{  
 geocode: true  
})

更多关于uni-app 安卓真机调试时,第一次位置权限授权plus.geolocation.getCurrentPosition API不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

( •̀ ω •́ )没有解决方案吗

更多关于uni-app 安卓真机调试时,第一次位置权限授权plus.geolocation.getCurrentPosition API不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的权限请求时机问题。在Android系统中,首次调用位置相关API时系统会弹出权限授权弹窗,此时JavaScript线程会被挂起,导致plus.geolocation.getCurrentPosition回调不执行。

解决方案:

  1. 权限预申请:在应用启动时提前申请位置权限
onLoad() {
    // 提前申请位置权限
    uni.authorize({
        scope: 'scope.userLocation',
        success: () => {
            console.log('位置权限已授权')
        }
    })
}
  1. 使用异步等待:确保权限授权完成后再执行定位
async onReady() {
    try {
        // 检查权限状态
        const setting = await uni.getSetting()
        if (!setting.authSetting['scope.userLocation']) {
            // 未授权时重新请求
            await uni.authorize({scope: 'scope.userLocation'})
        }
        
        // 权限确认后再执行定位
        plus.geolocation.getCurrentPosition((position) => {
            console.log('定位成功', position)
        }, (error) => {
            console.log("定位失败", error)
        }, {
            geocode: true
        })
    } catch (error) {
        console.log('权限申请失败', error)
    }
}
回到顶部