android 小程序 相册,小程序相册授权

生成海报保存到手机相册,

用户拒绝后就无法再次使用未授权时弹出的授权页面,

遇到的问题:

触发openSetting需要通过tap的调用

通过button来调用

则是通过点击showModal的回调来调用openSetting, 主要讲通过showModal这种方式

我用的是taro框架,所以一开始在程序中Promise 的来处理回调,报错:openSetting:fail can only be invoked by user TAP gesture. (官方回答:不能使用promise的方式去处理回调,需要改成直接普通的回调方式, promise是异步的,“点击行为允许调用”这个机制要求是同步的)

Taro.getSetting().then((res)=>{

console.log(res)

// 假如用户未授权,则弹出授权框让用户选择

if(!res.authSetting['scope.writePhotosAlbum']){

Taro.authorize({

scope:'scope.writePhotosAlbum'

}).then(()=>{

// 授权成功,则执行生成海报的程序

}).catch((err)=>{

// 如果用户拒绝了授权,则弹出提示框提示用户,用户点击弹出框确认按钮,则通过Taro.openSetting去重新授权相册

console.log(err)

// 拒绝后,错误提示有这几种,看别人都做if判断,我这边就不错判断

// err.errMsg == 'authorize:fail:auth deny' 这种是android上返回的(vivo)

// err.errMsg == 'authorize:fail auth deny' 这种是ios上第一次拒绝后返回的,还有开发者工具上也是返回这种

// err.errMsg == 'authorize:fail authorize no response' 这种是ios拒绝后,用户再次点击后返回的信息

Taro.showModal({

title:'提示',

content: '若不微信授权,则无法使用保存图片或视频到您的相册',

success: s=>{

Taro.openSetting({

success(settingdata) {

if (settingdata.authSetting['scope.writePhotosAlbum']) {

// 重新授权成功,则执行生成海报的程序

}else {

// 用户再次拒绝授权,则提示用户

Taro.showToast({

title: '获取权限失败,无法使用保存图片或视频到您的相册',

icon: 'none'

})

}

}

})

}

})

})

}else{

console.log("b")

that.createImg(user);

}

that.setState({

isCanvas: true

})

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值