一、公共方法
授权
- 用户拒绝或未授权时调用
InquiriesEmpower
方法
uni.showModal
为弹出确认弹窗,点击确定调用uni.openSetting
跳转设置页面,点击取消回跳uni.navigateBack()
上一页(也可不做处理)
InquiriesEmpower() {
uni.showModal({
content: '获取授权失败,是否重新授权?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
uni.openSetting({
success(res) {
console.log(res.authSetting)
}
});
} else if (res.cancel) {
console.log('用户点击取消');
uni.navigateBack()
}
}
});
拍照
- 前置授权条件满足后进入下面的事件,参数
flag
需要区分录像or拍照
,参数 _this
传递this指向
uni.chooseImage
从本地相册选择图片或使用相机拍照,sourceType: ['camera']
控制为相机拍照
sizeType: ['original', 'compressed']
,原图与缩略图
- 调用相机并拍摄成功后,
显示加载uni.showLoading
,submitFlag用于控制是否可提交
,调用上传uni.uploadFile
- 上传成功后将
数据处理进行回显fileList
,修改submitFlag状态
,关闭加载uni.showLoading
- 本次回显不做演示,拍照上传成功后拿到文件路径后,可随具体业务场景按需处理
录像
- 前置授权条件满足后进入下面的事件,参数
flag
需要区分录像or拍照
,参数 _this
传递this指向
uni.chooseVideo
拍摄视频或从手机相册中选视频,返回视频的临时文件路径,sourceType: ['camera']
控制为相机录制
- 调用相机并录制成功后,
显示加载uni.showLoading
,submitFlag用于控制是否可提交
,调用上传uni.uploadFile
- 上传成功后将
数据处理进行回显fileList
,修改submitFlag状态
,关闭加载uni.showLoading
- 本次回显不做演示,录制上传成功后拿到文件路径后,可随具体业务场景按需处理
captureOperateFn(flag, _this) {
if (flag == 'captureOperate') {
uni.chooseImage({
sizeType: ['original', 'compressed'],
sourceType: ['camera'],
success: function (res) {
this.submitFlag = false
uni.showLoading()
uni.uploadFile({
url: '上传地址',
filePath: res.tempFilePaths[0],
name: 'file',
formData: {
file: res
},
header: {
'Authorization': uni
.getStorageSync('token'),
},
success: (res) => {
console.log('相机上传', res);
if (res.statusCode ==200) {
const data = JSON.parse(res.data)
_this.fileList.push({
url: `${'前缀'}/${data.data}`
})
_this.submitFlag = true
uni.hideLoading()
}
},
fail: (err) => {
console.error(err);
}
});
}
});
} else {
uni.chooseVideo({
sourceType: ['camera'],
success: function (res) {
console.log('视频', res.tempFilePath);
this.submitFlag = false
uni.showLoading()
uni.uploadFile({
url: '上传地址',
filePath: res.tempFilePath,
name: 'file',
formData: {
file: res
},
header: {
'Authorization': uni
.getStorageSync('token'),
},
success: (res) => {
console.log('相机上传', res);
if (res.statusCode ==200) {
const data = JSON.parse(res.data)
_this.fileList.push({
url: `${'前缀'}/${data.data}`
})
_this.submitFlag = true
uni.hideLoading()
}
},
fail: (err) => {
console.error(err);
}
});
}
});
}
},
二、拍照
- 首先存储this,内部嵌套过深this指向会变
- 通过
uni.getSetting
获取用户的当前授权设置,res.authSetting
指向用户授权名称及设置状态
- 如果已授权则调用下载操作,否则获取授权
- 如果获取授权同意则调用下载操作,否则弹窗提示
- 如果未授权退出页面,下次触发会直接进入授权失败分支,默认弹窗提示
captureOperate() {
const _this = this
uni.getSetting({
success: (res) => {
console.log('是否授权', res);
console.log('相机', res.authSetting['scope.camera']);
if (!res.authSetting['scope.camera']) {
uni.authorize({
scope: 'scope.camera',
success: () => {
this.captureOperateFn('captureOperate', _this)
},
fail: () => {
console.log('授权失败')
this.InquiriesEmpower()
}
})
} else {
this.captureOperateFn('captureOperate', _this)
}
},
})
},
三、录像
- 首先存储this,内部嵌套过深this指向会变
- 通过
uni.getSetting
获取用户的当前授权设置,res.authSetting
指向用户授权名称及设置状态
- 如果已授权则调用下载操作,否则获取授权
- 如果获取授权同意则调用下载操作,否则弹窗提示
- 如果未授权退出页面,下次触发会直接进入授权失败分支,默认弹窗提示
videoOperate() {
const _this = this
uni.getSetting({
success: (res) => {
console.log('是否授权', res);
console.log('相机', res.authSetting['scope.camera']);
if (!res.authSetting['scope.camera']) {
uni.authorize({
scope: 'scope.camera',
success: () => {
console.log('授权成功')
this.captureOperateFn('videoOperate', _this)
},
fail: () => {
console.log('授权失败')
this.InquiriesEmpower()
}
})
} else {
this.captureOperateFn('videoOperate', _this)
}
},
})
},
四、录音
- 通过
uni.getSetting
获取用户的当前授权设置,res.authSetting
指向用户授权名称及设置状态
- 获取全局唯一的录音管理器
uni.recorderManager
- 如果已授权则调用下载操作,否则获取授权
- 如果获取授权同意则调用下载操作,否则弹窗提示
- 如果未授权退出页面,下次触发会直接进入授权失败分支,默认弹窗提示
- 本次上传使用uniapp扩展插件市场
voice-sound-recording
插件,也可根据全局管理器进行自定义设置,在此不做演示
audioOperate() {
const recorderManager = uni.getRecorderManager()
uni.getSetting({
success: (res) => {
console.log('是否授权', res);
console.log('相机', res.authSetting['scope.record']);
if (!res.authSetting['scope.record']) {
uni.authorize({
scope: 'scope.record',
success: () => {
console.log('授权成功')
this.recordingFlag = true
},
fail: () => {
console.log('授权失败')
this.InquiriesEmpower()
}
})
} else {
console.log('已授权');
this.recordingFlag = true
}
},
})
},