收藏
回答

bindlongpress长按发送语音,初次使用唤起两次授权怎么解决?

长按“按住说话”按钮,wx.authorize({scope: 'scope.record',success(res){ ... }})唤起麦克风权限连续唤起了两次,怎么解决呢

回答关注问题邀请回答
收藏

3 个回答

  • 🙃
    🙃
    2023-11-29

    楼主,问题解决了么,我这里也遇到了,看方法也就只执行了一次,但是弹窗确实弹出了两次

    2023-11-29
    有用
    回复
  • optimistic
    optimistic
    2023-11-09

    若是第三方服务商,配置 ext.json 的小程序和开发小程序会有两次授权,正式发布不会有这个问题

    2023-11-09
    有用
    回复 1
    • 🇨🇳番茄西红柿
      🇨🇳番茄西红柿
      2023-11-09
      目前是模拟器上如果长按的话会唤起两次,短按的话只唤起一次,这种的可以在onload的时候就唤起录音授权吗,避免在事件中唤起多次的问题
      2023-11-09
      回复
  • 夏味
    夏味
    2023-11-09

    请问具体什么机型?墨问便签小程序,我试了是正常的,只会弹出一次授权。

    2023-11-09
    有用
    回复 4
    • 🇨🇳番茄西红柿
      🇨🇳番茄西红柿
      2023-11-09
      iphonex模拟器
      <button class="btn voice_btn"
              bindlongpress="voiceStart" .....>
      // 开始录音
        voiceStart(e) {
          console.log('start')
          let that = this
          this.setData({
            isclick: true
          })
          this.startPoint = e.touches[0]
          const options = {
            duration: 60000,
            sampleRate: 16000,
            numberOfChannels: 1,
            encodeBitRate: 64000,
            format: 'mp3',
            frameSize: 50
          }
          wx.getSetting({
            success (res) {
              let auth = res.authSetting['scope.record'] //true授权成功
              if(auth){
                console.log(0)
                that.setData({
                  isclick: false
                })
                recorderManager.start(options);
                recorderManager.onStart(() => {
                  console.log('chagnan')
                  that.setData({
                    isVoiceShow: true,
                    stateTxt: '松开发送'
                  })
                  console.log('开始录音')
                });
              } else if(auth === undefined){ //首次授权
                console.log(1)
                wx.authorize({
                  scope: 'scope.record',
                  success() {
                    // resolve(true)
                    recorderManager.start(options);
                    recorderManager.onStart(() => {
                      console.log('recorder start')
                    });
                  },
                  fail(res) {
                  }
                })
              } else if(!res.authSetting['scope.record']){ //再次授权
                console.log(2)
                wx.showModal({
                    title: '提示',
                    content: '您未授权录音,功能将无法使用',
                    showCancel: true,
                    confirmText: "授权",
                    confirmColor: "#52a2d8",
                    success: function (res) {
                      if (res.confirm) {
                        //确认则打开设置页面(重点)
                        wx.openSetting({
                          success: (res) => {
                            console.log(3)
                            console.log(res.authSetting);
                            if (!res.authSetting['scope.record']) {
                              //未设置录音授权
                              console.log("未设置录音授权");
                              wx.showModal({
                                title: '提示',
                                content: '您未授权录音,功能将无法使用',
                                showCancel: false,
                                success: function (res) {
                                },
                              })
                            }else {
                              //第二次才成功授权
                              console.log("设置录音授权成功");
                              recorderManager.start(options);
                              recorderManager.onStart(() => {
                                console.log('recorder start')
                              });
                              //错误回调
                              recorderManager.onError((res) => {
                                console.log(res);
                              })
                            }
                          },
                          fail: function () {
                            console.log("授权设置录音失败");
                            wx.showModal({
                              title: '提示',
                              content: '授权失败',
                              showCancel: false,
                            })
                          }
                        })
                      } else if (res.cancel) {
                        console.log("cancel");
                      }
                    },
                    fail: function () {
                      console.log("openfail");
                    }
                  })
              }
              console.log('授权')
              console.log('success',auth)
            }
          })
        },
      2023-11-09
      回复
    • 夏味
      夏味
      2023-11-09回复🇨🇳番茄西红柿
      wx.getSetting 是限频接口,只能在 app 启动时调用一次
      https://developers.weixin.qq.com/miniprogram/dev/framework/performance/api-frequency.html
      2023-11-09
      回复
    • 夏味
      夏味
      2023-11-09回复🇨🇳番茄西红柿
      核心代码没啥其他问题
      2023-11-09
      回复
    • 🇨🇳番茄西红柿
      🇨🇳番茄西红柿
      2023-11-09回复夏味
      怎么避免唤起两次的问题呢
      2023-11-09
      回复
登录 后发表内容