YyJj123123
YyJj123123
  • 发布:2022-04-29 10:00
  • 更新:2022-08-18 15:57
  • 阅读:2649

【报Bug】app端调用uni.getlocation失败?

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: Alpha

HBuilderX版本号: 3.4.8

手机系统: Android

手机系统版本号: Android 11

手机厂商: OPPO

手机机型: Findx 3pro

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

先关闭app所拥有的权限,进入app地图选点后,uni.getLocation会自动判断用户是否开启了权限,如果没开应该会再次指引用户开,如果开了,就应该显示改定位

预期结果:

先关闭app所拥有的权限,进入app地图选点后,uni.getLocation会自动判断用户是否开启了权限,如果没开应该会再次指引用户开,如果开了,就应该显示改定位

实际结果:

uni.getlocation无反应后,再也无法弹出授权提示框了

bug描述:

app有个地图选点功能,如果用户最初是没有给任何权限(比如新安装的app),那么再调用uni.getlocation的时候,就会有个授权开启位置服务的提示,如果用户拒绝的话,就会提示他没打开定位,就无法精准判断他位置,如果用户看到提示之后根据指引打开了这个定位权限,应当能正确返回位置才对,但实际情况是,压根就没有授权提示框出现了

2022-04-29 10:00 负责人:DCloud_Android_ST 分享
已邀请:

最佳回复

DCloud_Android_ST

DCloud_Android_ST

用户地图appkey设置错误导致

YyJj123123

YyJj123123 (作者)

相关链接中,官方既然指出了这个问题,为什么现在还没想办法解决啊???

DCloud_Android_ST

DCloud_Android_ST

uni.getlocation返回错误异常后则表示执行完毕。开发者接收到相关异常自行处理。如没有权限是引导用户开启还是其他方式由开发者处理。你这种引导用户开权限可以通过onshow的回调使用https://www.html5plus.org/doc/zh_cn/android.html#plus.android.requestPermissions 校验开发者是否开启权限。然后重新调用uni.getlocation

  • YyJj123123 (作者)

    调用了的 但是无反应

    2022-04-29 11:49

  • YyJj123123 (作者)

    我这里的逻辑是,在onshow中判断app定位权限以及手机定位权限,如果这两个权限都有,就会去调用uni.getlocation,如果这两个权限有一个没有,就会指引用户去对应的设置界面去设置权限。然后设置回来之后,又进入了判断权限的方法,有就uni.getlocation,没有就继续弹窗指引,就是这么个逻辑

    2022-04-29 11:52

  • DCloud_Android_ST

    回复 YyJj123123: 我改了下回复 你再看下。 还有就是内部权限申请如果连续两次拒绝则会终止权限申请。重新运行应用则会重新计数

    2022-04-29 11:53

  • YyJj123123 (作者)

    回复 DCloud_Android_ST: 好 我再看下 谢谢大哥

    2022-04-29 11:57

  • DCloud_Android_ST

    回复 YyJj123123: 我刚才亲测了一下 不要在onshow调用权限校验 这个逻辑会死循环 应该是bug我们这边在处理

    2022-04-29 12:12

DCloud_Android_ST

DCloud_Android_ST

这是用NJS实现的一个权限校验逻辑 不包括申请。你可以先用这个使用 后期会在plus.android上提供checkSelfPermission能力

var PermissionChecker = plus.android.importClass("androidx.core.content.PermissionChecker")  
            var main =plus.android.runtimeMainActivity()  
            var checkResult = PermissionChecker.checkSelfPermission(main, 'android.permission.ACCESS_FINE_LOCATION')  
            switch(checkResult) {  
                case PermissionChecker.PERMISSION_GRANTED:  
                console.log("权限允许")  
                break;  
                case PermissionChecker.PERMISSION_DENIED:  
                console.log("权限拒绝")  
                break;  
                case PermissionChecker.PERMISSION_DENIED_APP_OP:  
                console.log("权限永久拒绝")  
                break;  
            }
  • YyJj123123 (作者)

    这个我知道诶,我试了自己判断权限,以及用这个判断权限,都只能在调试的时候有效,打包安装之后,如果用户拒绝授权的话,就会导致用户点击获取定位按钮的时候,无任何响应



    async authHasLocation() {
    uni.showLoading({
    title: '获取定位中'
    });
    let res = await gps.getLocation();
    uni.showToast({
    icon: 'none',
    title: res
    });
    if (res) {
    let addRess = `${res.address.poiName}(${res.address.province}${res.address.city}${res.address.district}${res.address.streetNum})`;
    this.$set(this.formData, 'signAddress', addRess);
    this.$set(this.formData, 'longitude', res.longitude);
    this.$set(this.formData, 'latitude', res.latitude);
    } else {
    uni.showModal({
    title: '提示',
    content: res
    });
    this.regainData();
    this.location.error = true;
    }
    uni.hideLoading();
    }```

    2022-04-29 13:44

  • YyJj123123 (作者)

    我有看到你们uni的一个大佬说着就是一个Bug,原生开发都会这样,但是没说如何解决。

    还用了dcloud_json大哥在插件市场发布的一个在onshow周期获取定位权限的插件,同样的还是会进入到这个bug中,导致无法正常使用

    2022-04-29 13:48

  • YyJj123123 (作者)

    我觉得大哥你可以试试你刚写的哪个测试的方法,打包之后再看,我估计还是不行的,只能在真机调试的时候使用

    2022-04-29 13:50

  • YyJj123123 (作者)

    麻烦大哥教个方法能解决这问题吧,我这里都卡了挺久的了,还是想不到办法解决

    2022-04-29 13:52

  • DCloud_Android_ST

    回复 DCloud_Android_ST: 你回复 YyJj123123: 私信发下QQ

    2022-04-29 14:33

YyJj123123

YyJj123123 (作者)

经过反复查验,出现此错误是由于我需要用一份代码,上架不同的两个版本,修改了包名导致打包的包名与在高德开发者后台注册的KEY的包名不一致所致。并不是Bug。

火山喷出爆米花

火山喷出爆米花

你好,一样是小程序端转app开发,用的是nvue方便留个联系方式交流一下吗?

该问题目前已经被锁定, 无法添加新回复