当前位置: 首页 > news >正文

uni-app app端安卓和ios如何申请麦克风权限,唤起提醒弹框

代码包含功能如下:
1、判断推送权限是否开启
2、判断定位权限是否开启
3、判断麦克风权限是否开启
4、判断相机权限是否开启
5、判断相册权限是否开启
6、判断通讯录权限是否开启
7、判断日历权限是否开启
8、判断备忘录权限是否开启
9、Android权限查询
10、检查系统的设备服务是否开启
废话不多说上代码

/*** 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启*/var isIos
// #ifdef APP-PLUS
isIos = (plus.os.name == "iOS")
// #endif// 判断推送权限是否开启
export function judgeIosPermissionPush() {var result = false;var UIApplication = plus.ios.import("UIApplication");var app = UIApplication.sharedApplication();var enabledTypes = 0;if (app.currentUserNotificationSettings) {var settings = app.currentUserNotificationSettings();enabledTypes = settings.plusGetAttribute("types");console.log("enabledTypes1:" + enabledTypes);if (enabledTypes == 0) {console.log("推送权限没有开启");} else {result = true;console.log("已经开启推送功能!")}plus.ios.deleteObject(settings);} else {enabledTypes = app.enabledRemoteNotificationTypes();if (enabledTypes == 0) {console.log("推送权限没有开启!");} else {result = true;console.log("已经开启推送功能!")}console.log("enabledTypes2:" + enabledTypes);}plus.ios.deleteObject(app);plus.ios.deleteObject(UIApplication);return result;
}// 判断定位权限是否开启
export function judgeIosPermissionLocation() {var result = false;var cllocationManger = plus.ios.import("CLLocationManager");var status = cllocationManger.authorizationStatus();result = (status != 2)console.log("定位权限开启:" + result);// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation/* var enable = cllocationManger.locationServicesEnabled();var status = cllocationManger.authorizationStatus();console.log("enable:" + enable);console.log("status:" + status);if (enable && status != 2) {result = true;console.log("手机定位服务已开启且已授予定位权限");} else {console.log("手机系统的定位没有打开或未给予定位权限");} */plus.ios.deleteObject(cllocationManger);return result;
}// 判断麦克风权限是否开启
export function judgeIosPermissionRecord() {var result = false;// ios 判断if (isIos) {var avaudiosession = plus.ios.import("AVAudioSession");var avaudio = avaudiosession.sharedInstance();var permissionStatus = avaudio.recordPermission();console.log("permissionStatus:" + permissionStatus);if (permissionStatus == 1970168948) {console.log("麦克风权限没有开启");/**    * 申请麦克风权限 requestRecordPermission    * 调用入参:handler回调函数(无回调结果)   *   * 当权限状态为:1970168948用户未作出选择时,调用此方法系统会弹出提示框让用户确认授权    * 当权限状态非:1970168948时,只能跳转到系统设置界面,让用户手动开启,使用plus.runtime.openURL("app-settings://");跳转,或者gotoAppPermissionSetting(参考插件https://ext.dcloud.net.cn/plugin?id=594)    */    avaudio.requestRecordPermission(()=>{  console.error('回调完成');});// plus.device.beep(1);result = false;} else if(permissionStatus == 1684369017){uni.showModal({title: '提示',content: '需要麦克风权限才能使用录音功能,是否去设置开启?',success: function(res) {if (res.confirm) {// gotoAppPermissionSetting();plus.runtime.openURL("app-settings://");}}});result = false;} else {result = true;console.error("麦克风权限已经开启");}plus.ios.deleteObject(avaudiosession);} else {var PackageManager = plus.android.importClass("android.content.pm.PackageManager");var main = plus.android.runtimeMainActivity();var checkPermission = main.checkSelfPermission("android.permission.RECORD_AUDIO");if(checkPermission == PackageManager.PERMISSION_GRANTED) {console.log("麦克风权限已经开启");result = true;} else {console.log("麦克风权限没有开启");plus.android.requestPermissions(['android.permission.RECORD_AUDIO'], function(e) {if (e.deniedAlways.length > 0) {  // 权限被永久拒绝  //用户没有选择竟然也是跟永久拒绝返回的参数一样(暂时无解),微信也是这样做的console.log('永久拒绝!' + e.deniedAlways.toString());uni.showModal({title: '提示',content: '需要麦克风权限才能使用录音功能,是否去设置开启?',success: function(res) {if (res.confirm) {gotoAppPermissionSetting();}}});result = false;} else if (e.deniedPresent.length > 0) {  // 权限被临时拒绝console.log('临时拒绝!' + e.deniedPresent.toString());result = false;} else if (e.granted.length > 0) {  // 权限被允许console.log('已授权!' + e.granted.toString());result = false;} else { console.log('未做选择');result = false;}}, function(e) {console.log('请求权限错误:' + JSON.stringify(e));result = false;});}}console.error("语音授权结果-----------", result);return result;
}// 判断相机权限是否开启
export function judgeIosPermissionCamera() {var result = false;var AVCaptureDevice = plus.ios.import("AVCaptureDevice");var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');console.log("authStatus:" + authStatus);if (authStatus == 3) {result = true;console.log("相机权限已经开启");} else {console.log("相机权限没有开启");}plus.ios.deleteObject(AVCaptureDevice);return result;
}// 判断相册权限是否开启
export function judgeIosPermissionPhotoLibrary() {var result = false;var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");var authStatus = PHPhotoLibrary.authorizationStatus();console.log("authStatus:" + authStatus);if (authStatus == 3) {result = true;console.log("相册权限已经开启");} else {console.log("相册权限没有开启");}plus.ios.deleteObject(PHPhotoLibrary);return result;
}// 判断通讯录权限是否开启
export function judgeIosPermissionContact() {var result = false;var CNContactStore = plus.ios.import("CNContactStore");var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);if (cnAuthStatus == 3) {result = true;console.log("通讯录权限已经开启");} else {console.log("通讯录权限没有开启");}plus.ios.deleteObject(CNContactStore);return result;
}// 判断日历权限是否开启
export function judgeIosPermissionCalendar() {var result = false;var EKEventStore = plus.ios.import("EKEventStore");var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);if (ekAuthStatus == 3) {result = true;console.log("日历权限已经开启");} else {console.log("日历权限没有开启");}plus.ios.deleteObject(EKEventStore);return result;
}// 判断备忘录权限是否开启
export function judgeIosPermissionMemo() {var result = false;var EKEventStore = plus.ios.import("EKEventStore");var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);if (ekAuthStatus == 3) {result = true;console.log("备忘录权限已经开启");} else {console.log("备忘录权限没有开启");}plus.ios.deleteObject(EKEventStore);return result;
}// Android权限查询
export function requestAndroidPermission(permissionID) {return new Promise((resolve, reject) => {plus.android.requestPermissions([permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装function(resultObj) {var result = 0;for (var i = 0; i < resultObj.granted.length; i++) {var grantedPermission = resultObj.granted[i];console.log('已获取的权限:' + grantedPermission);result = 1}for (var i = 0; i < resultObj.deniedPresent.length; i++) {var deniedPresentPermission = resultObj.deniedPresent[i];console.log('拒绝本次申请的权限:' + deniedPresentPermission);result = 0}for (var i = 0; i < resultObj.deniedAlways.length; i++) {var deniedAlwaysPermission = resultObj.deniedAlways[i];console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);result = -1}resolve(result);// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限// if (result != 1) {// gotoAppPermissionSetting()// }},function(error) {console.log('申请权限错误:' + error.code + " = " + error.message);resolve({code: error.code,message: error.message});});});
}// 使用一个方法,根据参数判断权限
export function judgeIosPermission(permissionID) {if (permissionID == "location") {return judgeIosPermissionLocation()} else if (permissionID == "camera") {return judgeIosPermissionCamera()} else if (permissionID == "photoLibrary") {return judgeIosPermissionPhotoLibrary()} else if (permissionID == "record") {return judgeIosPermissionRecord()} else if (permissionID == "push") {return judgeIosPermissionPush()} else if (permissionID == "contact") {return judgeIosPermissionContact()} else if (permissionID == "calendar") {return judgeIosPermissionCalendar()} else if (permissionID == "memo") {return judgeIosPermissionMemo()}return false;
}// 跳转设置 跳转到**应用**的权限页面
export function gotoAppPermissionSetting() {if (isIos) {var UIApplication = plus.ios.import('UIApplication')var application2 = UIApplication.sharedApplication()var NSURL2 = plus.ios.import('NSURL')// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");var setting2 = NSURL2.URLWithString('app-settings:')application2.openURL(setting2)plus.ios.deleteObject(setting2)plus.ios.deleteObject(NSURL2)plus.ios.deleteObject(application2)} else {// console.log(plus.device.vendor);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)}
}// 检查系统的设备服务是否开启
// var checkSystemEnableLocation = async function () {
export function checkSystemEnableLocation() {if (isIos) {var result = false;var cllocationManger = plus.ios.import("CLLocationManager");var result = cllocationManger.locationServicesEnabled();console.log("系统定位开启:" + result);plus.ios.deleteObject(cllocationManger);return result;} else {var context = plus.android.importClass("android.content.Context");var locationManager = plus.android.importClass("android.location.LocationManager");var main = plus.android.runtimeMainActivity();var mainSvr = main.getSystemService(context.LOCATION_SERVICE);var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);console.log("系统定位开启:" + result);return result}
}

http://www.lryc.cn/news/617429.html

相关文章:

  • 设计模式笔记_结构型_组合模式
  • 5G NTN 卫星测试产品
  • 5G NR 非地面网络 (NTN) 5G、太空和统一网络
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 电力仿真系统:技术革新与市场格局的深度解析
  • 【CV 目标检测】①——目标检测概述
  • 【Oracle】如何使用DBCA工具删除数据库?
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • 排序与查找,简略版
  • 简单清晰的讲解一下RNN神经网络
  • 常用设计模式系列(十九)- 状态模式
  • EI检索-学术会议 | 人工智能、虚拟现实、可视化
  • 揭开内容分发网络(CDN)的神秘面纱:互联网的隐形加速器
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【线性基】 P3857 [TJOI2008] 彩灯|省选-
  • 第16届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2024年10月20日真题
  • 【14-模型训练细节】
  • 基于Android的小区车辆管理系统
  • 让AI应用开发更简单——蚂蚁集团推出企业级AI集成解决方案
  • 论文中PDF的公式如何提取-公式提取
  • 闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计
  • 覆盖近 1.5 万个物种,谷歌 DeepMind 发布 Perch 2.0,刷新生物声学分类检测 SOTA
  • 国内 Mac 开启 Apple Intelligence 教程
  • 【C++】哈希表的实现(unordered_map和unordered_set的底层)
  • Redis实现排行榜
  • 2025年渗透测试面试题总结-14(题目+回答)
  • 【MySQL基础篇】:MySQL索引——提升数据库查询性能的关键
  • 简单的身份验证中间件Tinyauth
  • 如何使用 Watchtower 实现定时更新 docker 中的镜像并自动更新容器(附 schedule 的参数详细解释)