代码参考来着blog.csdn.net/xiyan_yu/ar…
ios权限描述
ios权限描述直接在manifest.json配置即可
文档来源uniapp.dcloud.net.cn/collocation…
以头像和图库为例
"ios" : {
"privacyDescription" : {
"NSPhotoLibraryUsageDescription" : "app有上传头像功能,允许用户从相册中上传头像图片",
"NSCameraUsageDescription" : "app有上传头像功能,用户可以通过摄像头拍照并上传头像"
},
......
},
如果对ios权限设置有更多的要求的可去看这篇文章www.cnblogs.com/guanqiweb/p…
安卓主动发起权限申请
文档来源www.html5plus.org/doc/zh_cn/a…
发起权限请求如下,如果权限被
禁用或者获取不到则跳转手机应用权限设置(跳转手机应用权限设置见下面第二段代码)。
scope为权限,这个传入值可以直接百度关键词:Android、权限、android.permission
message为被禁用时弹窗提醒,注意这个传参一定要有权限使用描述,就是你要这个权限是用于干啥的,要不然审核很可能不给过
function requestPermissions(scope, message) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
["android.permission." + scope],
function (resultObj) {
console.log(resultObj, "resultObj");
resolve(resultObj);
if (
resultObj.deniedPresent.length > 0 ||
resultObj.deniedAlways.length > 0
) {
goSetting(message);
}
},
function (error) {
goSetting("获取权限失败,请重试");
}
);
});
}
跳转手机应用权限设置如下
// 跳转权限设置
function goSetting(message) {
uni.showModal({
title: "提示",
content: message,
// showCancel: false, // 不显示取消按钮
success(res) {
if (res.confirm) {
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
} else if (res.cancel) {
SubmitSureRef.value.cancel();
}
},
fail(err) {
SubmitSureRef.value.cancel();
},
});
}
创建权限描述视图
title为什么权限,message为权限描述——这个权限是为了什么
var topMessageView;
function createTopMessage(title, message) {
topMessageView = new plus.nativeObj.View("topMessageView", {
width: "100%",
height: "100%",
backgroundColor: "rgba(0,0,0,0.7)",
});
topMessageView.drawText(
title,
{
left: "10%",
width: "80%",
top: "0px",
height: "80%",
},
{
color: "#ffffff",
size: "25px",
}
);
topMessageView.drawText(
message,
{
top: "35px",
left: "10%",
width: "80%",
height: "80%",
},
{
color: "#ffffff",
whiteSpace: "normal",
}
);
// 显示消息提示框
topMessageView.show();
}
将以上组合使用,以uni.chooseImage为例
拍照
async function camera() {
/*#ifdef APP-PLUS*/
if (plus.os.name !== "iOS") {
setTimeout(() => {
createTopMessage("相机权限", "为了给您提供修改头像功能");
}, 300);
let res = await requestPermissions(
"CAMERA",
"相机权限未获得,此权限为了给您提供修改头像功能,请前往设置中打开"
);
setTimeout(() => {
topMessageView.close();
}, 300);
if (!res.granted[0]) {
// 无权限
return;
}
}
/*#endif*/
uni.chooseImage({
count: 1, //默认9
sizeType: ["compressed"], //可以指定是原图还是压缩图,默认二者都有
sourceType: ["camera"], //从相册选择
success: function (res) {
saveAvatar(res);
},
});
}
图库获取图片
async function photo(params) {
/*#ifdef APP-PLUS*/
if (plus.os.name !== "iOS") {
setTimeout(() => {
createTopMessage("访问媒体和文件权限", "为了给您提供修改头像功能");
}, 300);
let res = await requestPermissions(
"READ_EXTERNAL_STORAGE",
"访问媒体和文件权限未获得,此权限为了给您提供修改头像功能,请前往设置中打开"
);
setTimeout(() => {
topMessageView.close();
}, 300);
if (!res.granted[0]) {
// 无权限
return;
}
}
/*#endif*/
uni.chooseImage({
count: 1, //默认9
sizeType: ["compressed"], //可以指定是原图还是压缩图,默认二者都有
sourceType: ["album"], //从相册选择
success: function (res) {
saveAvatar(res);
},
});
}
效果如下图