Uniapp/微信小程序授权设置并实现点击保存图片

一:需要用到的API

1.uni.authorize(OBJECT)     -- 提前向用户发起授权请求。

uni.authorize({scope: 'scope.userInfo',success() {console.log('授权成功');}
});

:如果用户之前拒绝了授权,此接口会直接进入失败回调。一般需要搭配uni.getSettinguni.openSetting使用。

2.uni.getSetting (Object object)   --获取用户的当前设置消息

uni.getSetting({success(res) {if (res.authSetting['scope.userInfo']) {console.log('用户已授权');} else {console.log('用户未授权');}}
});

3.uni.openSetting(Object object)  --用户手动进行授权设置

uni.openSetting();

4.uni.uploadFile(OBJECT)   --将本地资源上传到开发者服务器

5. uni.saveImageToPhotosAlbum(OBJECT)   --保存图片到系统相册

二:思路

1.过程

1.判断用户是否授权保存图片到系统相册

    1:如果未授权(两种情况):调授权再保存图片

       (1)用户第一次调用 (uni.authorize) 

       (2)用户之前拒绝授权 (uni.openSetting)

                        如果之前拒绝,过阵子想再次保存,需要判断是否第一次授权

  (注意:前面已经提过了authorize只弹窗一次,如果之前拒绝过了,接口直接进入失败回调,所以需要判断是否首次)

    2:如果已授权:直接保存图片

三:代码实现

 1.先配置:manifest.json

"mp-weixin": {"permission": {"scope.writePhotosAlbum": {"desc": "你的图片将保存到手机相册"}},},

注: 微信小程序在2023年10月17日之后,使用API需要配置​​​​​​隐私协议

------获取具体信息请移步官方文档uni.chooseImage(OBJECT) | uni-app官网

2. 保存图片功能代码实现:(无判断授权情况)

  downSaveImage(imgurl) {uni.showModal({title: '保存图片',content: '是否保存当前图片?',success: (res) => {if (res.confirm) {uni.downloadFile({url: imgurl,//图片地址success: (res) => {if (res.statusCode === 200) {// console.log(res.tempFilePath,'res.tempFilePathres.tempFilePath');uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function () {uni.showToast({title: '保存成功',duration: 2000,})},fail: function () {uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},})}},})} else if (res.cancel) {uni.showToast({title: "你取消了该操作",icon:'none',duration: 2000});}},})},

(2)用户授权情况部分代码

  downSaveImage(imgurl) {uni.getSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {// 已授权,直接保存图片//这里写保存图片代码.......} else if (res.authSetting['scope.writePhotosAlbum'] === false) {// 用户已拒绝授权,提示用户授权uni.showModal({title: '提示',content: '您未授权保存图片到相册,是否前往设置页面进行授权?',success: function (res) {if (res.confirm) {uni.openSetting({success: function (res) {if (res.authSetting['scope.writePhotosAlbum']) {//这里写保存图片代码.......}},})} else if (res.cancel) {uni.showToast({title: '您取消了授权',icon: 'none',duration: 2000,})}},})} else {// 用户第一次调用,调用授权接口uni.authorize({scope: 'scope.writePhotosAlbum',success() {//这里写保存图片代码.......},fail() {uni.showToast({title: '授权失败,请稍后重试',icon: 'none',duration: 2000,})},})}},})},

(3)添加授权+保存图片功能的完整代码

downSaveImage(imgurl) {uni.getSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {// 已授权,直接保存图片uni.downloadFile({url: imgurl,success: (res) => {if (res.statusCode === 200) {uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function () {uni.showToast({title: '保存成功',duration: 2000,})},fail: function () {uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},})}},})} else if (res.authSetting['scope.writePhotosAlbum'] === false) {// 用户已拒绝授权,提示用户授权uni.showModal({title: '提示',content: '您未授权保存图片到相册,是否前往设置页面进行授权?',success: function (res) {if (res.confirm) {uni.openSetting({success: function (res) {if (res.authSetting['scope.writePhotosAlbum']) {uni.downloadFile({url: imgurl,success: (res) => {if (res.statusCode === 200) {uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function () {uni.showToast({title: '保存成功',duration: 2000,})},fail: function () {uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},})}},})}},})} else if (res.cancel) {uni.showToast({title: '您取消了授权',icon: 'none',duration: 2000,})}},})} else {// 用户第一次调用,调用授权接口uni.authorize({scope: 'scope.writePhotosAlbum',success() {uni.downloadFile({url: imgurl,success: (res) => {if (res.statusCode === 200) {uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function () {uni.showToast({title: '保存成功',duration: 2000,})},fail: function () {uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},})}},})},fail() {uni.showToast({title: '授权失败,请稍后重试',icon: 'none',duration: 2000,})},})}},})
}

四:项目中注意的问题:

1.微信小程序模拟器可以保存图片,但是手机真机调试不行。

原因:这可能是因为开发版的域名没有配置正确导致的。在开发版中,小程序的文件系统是虚拟的,而在正式版中,小程序的文件系统是真实存在的。因此,在开发版中,图片的路径可能会与正式版中不同

项目中如果图片地址是后台返回的临时地址,在微信小程序模拟器返回的地址开头是:

http://tmp/.......jpg

但是真机上调试返回图片地址开头是:

wxfile://tmp/......jpg

2.必须要先授权请求(authSetting

如果直接(openSetting)让用户手动设置授权,打开的只是之前已经授权过的权限,看不到未请求的内容

要用户先拒绝授权再引导用户手动打开设置页面进行授权。这样用户在设置页面中就能看到所有的权限内容,包括未请求的权限,从而能够正确地进行授权操作。

ps:之前一直打开手动的,没有授权过,所以就没有想要的授权按钮,耗了好久还以为是什么大bug..........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BSN实名DID服务发布会在北京召开

12月12日,由国家信息中心、公安部第一研究所联合主办,中国移动通信集团有限公司、区块链服务网络(BSN)发展联盟、中关村安信网络身份认证产业联盟(OIDAA)承办的“BSN实名DID服务发布会”在北京召开&#xf…

【代码随想录算法训练营-第六天】【哈希表】242,349,202,1

242.有效的字母异位词 第一遍 思考 比较简单&#xff0c;用数组就能实现了 class Solution {public boolean isAnagram(String s, String t) {int[] checkListi new int[256];int[] checkListj new int[256];for (int i 0; i < s.length(); i) {char checkChar s.ch…

工作随记:oracle 19c客户端通过service访问PDB异常问题

文章目录 概要技术测试分析测试1&#xff1a;测试2&#xff1a;测试3&#xff1a;测试4&#xff1a; 解决方案&#xff1a;1、修改service2、修改pdb名称 总结 概要 应用端访问提示错误信息为&#xff1a;VersionHelper异常!未将对象引用设置到对象的实例&#xff01; 此问题…

【产品】Axure的基本使用(二)

文章目录 一、元件基本介绍1.1 概述1.2 元件操作1.3 热区的使用 二、表单型元件的使用2.1 文本框2.2 文本域2.3 下拉列表2.4 列表框2.5 单选按钮2.6 复选框2.7 菜单与表格元件的使用 三、实例3.1 登录2.2 个人简历 一、元件基本介绍 1.1 概述 在Axure RP中&#xff0c;元件是…

MySQL 系列:注意 ORDER 和 LIMIT 联合使用的陷阱

文章目录 前言背后的原因ORDER BY 排序列存在相同值时返回顺序是不固定的LIMIT 和 ORDER BY 联合使用时的行为ORDER BY 或 GROUP BY 和 LIMIT 联合使用优化器默认使用有序索引 如何解决其它说明个人简介 前言 不知道大家在在分页查询中有没有遇到过这个问题&#xff0c;分页查…

数据通信网络基础

数据通信网络基础&#xff08;1&#xff09; 一.前言 • 在人类社会的起源和发展过程中&#xff0c;通信就一直伴随着我们。从20世纪七、八十年代开始&#xff0c; 人类社会已进入到信息时代&#xff0c;对于生活在信息时代的我们&#xff0c;通信的必要性更是不言而喻 的。…

使用Python监控服务器在线状态

前言 在公司内网有一台服务器&#xff0c;有动态的公网IP&#xff0c;使用DDNS对外提供服务&#xff0c;但是会因为停电、服务器卡死等原因导致服务器离线。服务器离线后无法及时获知&#xff0c;因此需要实现在服务器离线的时候能够发送消息到手机上。 思路梳理 公司办理的…

使用meta的audiobox生成广播剧

在gpt中生成对话&#xff1a; 生成一段一个小男孩和一个小女孩&#xff0c;在森林中并肩走在林间小路上的谈话&#xff0c;请用英文&#xff0c;并配有林中各种声效&#xff0c; 在gpt中生成男孩的声音描述 请用英文描述一下小男孩的声音特点 在gpt中生成女孩的声音描述 请用英…

基于单片机的电梯声控系统设计(论文+源码)

1.系统设计 在目前的高楼住宅&#xff0c;商业大厦中电梯是不可或缺的&#xff0c;而传统的电梯控制器系统&#xff0c;通常需要用户用手去按下按键进行控制&#xff0c;但是这种方式在有些情况下&#xff0c;并不完善&#xff0c;比如在本次新冠疫情期间&#xff0c;由于新冠…

甲醛酒精氢气浓度检测MP503传感器模块设计原理说明

模块简介: 本模块采集MP503空气质量传感器信号,通过单片机的10位ADC对传感器信号采样,并通过气体浓度线性曲线算法计算出气体浓度,可计算出甲醛、酒精、氢气浓度值。模块以TTL串口作为数据输出接口。 2.技术指标: 产品型号 KM-MP503 检测对象 甲醛、酒精、氢气浓度 通信…

设计模式(2)--对象创建(4)--原型

1. 意图 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。 2. 两种角色 抽象原型(Prototype)、具体原型(Concrete Prototype) 3. 优点 3.1 对客户隐藏了具体的产品类 3.2 可以在运行时刻增加和删除产品 3.3 可以极大地减少系统所需要的类的数目 …

OpenStack网络详解

本文主要解释了OpenStack在安装完毕——创建网段与dhcp——创建虚拟机的过程中&#xff0c;系统中多出来的这一堆网卡到底分别连接哪两部分的网卡&#xff0c;以及哪些设备是虚拟出来的。 拓扑 红色代表ovs与网桥 蓝色代表命名空间或者虚机 绿色代表网卡 网络概况 openstack安…

大语言模型--能力

能力 大语言模型 能力从语言模型到任务模型的转化语言建模总结 从语言模型到任务模型的转化 在自然语言处理的世界中&#xff0c;语言模型 p p p是一种对代币序列 x 1 : L x_{1:L} x1:L​这样的模型能够用于评估序列&#xff0c;例如 p ( t h e , m o u s e , a t e , t h e ,…

java设计模式学习之【享元模式】

文章目录 引言享元模式简介定义与用途实现方式 使用场景优势与劣势在Java中的应用享元模式在Spring中的应用画图示例代码地址 引言 想象一下&#xff0c;您正在开发一个游戏&#xff0c;游戏中有成千上万的树木和建筑。如果每个对象都独立存储它的所有数据&#xff0c;将会占用…

(开源)2023工训大赛智能垃圾分类项目(可循环播放视频,显示垃圾分类信息,拍照识别,垃圾分类,满载报警,压缩)

省赛:由于这个比赛是两年一届&#xff0c;并未做足充分的准备&#xff0c;但是通过一定的单片机基础&#xff0c;加上速成能力&#xff0c;也就是熬夜学&#xff0c;通过疯狂的网络搜索&#xff0c;在省赛第5 入选国赛 下面来简单介绍一下我们作品&#xff1a; 主控&#xff1…

总结一些vue3小知识2

1.el-tree-select和el-tree组件报错&#xff08;有的下拉选项选择不了&#xff0c;一点击就报错&#xff0c;但是有的却能选择&#xff0c;不会报错&#xff09; 原因:就如同v-for一样&#xff0c;需要添加key才不会出现渲染错误&#xff0c;而el-tree-select和el-tree组件需要…

Sketch for Mac:实现你的创意绘图梦想的矢量绘图软件

随着数字时代的到来&#xff0c;矢量绘图软件成为了广告设计、插画创作和UI设计等领域中必不可少的工具。在众多矢量绘图软件中&#xff0c;Sketch for Mac&#xff08;矢量绘图软件&#xff09;以其强大的功能和简洁的界面脱颖而出&#xff0c;成为了众多设计师的首选。 Sket…

用XAMPP在Windows系统构建一个本地Web服务器

用XAMPP在Windows系统构建一个本地Web服务器 Build a Local Web Server for Windows with XAMPP By JacksonML 本文简要介绍如何获取和安装XAMPP以实现Windows环境下本地Web服务器的过程&#xff0c;希望对广大网友和学生有所帮助。 所谓本地Web服务器&#xff0c;即使用本地…

el-date-picker限制选择7天内禁止内框选择

需求&#xff1a;elementPlus时间段选择框需要满足&#xff1a;①最多选7天时间。②不能手动输入。 <el-date-picker v-model"timeArrange" focus"timeEditable" :editable"false" type"datetimerange" range-separator"至&qu…

记录汇川:套接字TCP通信-梯形图

H5U集成一路以太网接口。使用AutoShop可以通过以太网方便、快捷对H5U进行行监控、下载、上载以及调试等操作。同时也可以通过以太网与网络中的其他设备进行数据交互。H5U集成了Modbus-TCP协议&#xff0c;包括服务器与客户端。可轻松实现与支持Modbus-TCP的设备进行通讯与数据交…