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
( •̀ ω •́ )没有解决方案吗
更多关于uni-app 安卓真机调试时,第一次位置权限授权plus.geolocation.getCurrentPosition API不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的权限请求时机问题。在Android系统中,首次调用位置相关API时系统会弹出权限授权弹窗,此时JavaScript线程会被挂起,导致plus.geolocation.getCurrentPosition回调不执行。
解决方案:
- 权限预申请:在应用启动时提前申请位置权限
onLoad() {
// 提前申请位置权限
uni.authorize({
scope: 'scope.userLocation',
success: () => {
console.log('位置权限已授权')
}
})
}
- 使用异步等待:确保权限授权完成后再执行定位
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)
}
}

