CLP
CLP
  • 发布:2019-05-10 12:13
  • 更新:2023-09-06 09:59
  • 阅读:15170

iOS平台:用Native.js来写 如何判断系统功能权限是否开启

分类:Native.js

更新:插件市场已经提供了封装更完善版本:https://ext.dcloud.net.cn/plugin?id=594

1、推送

判断推送权限是否开启

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 {  
						console.log("已经开启推送功能!")  
					}  
					plus.ios.deleteObject(settings);  
				} else {  
					enabledTypes = app.enabledRemoteNotificationTypes();  
					if (enabledTypes == 0) {  
						console.log("推送权限没有开启!");  
					} else {  
						console.log("已经开启推送功能!")  
					}  
					console.log("enabledTypes2:" + enabledTypes);  
				}  
				plus.ios.deleteObject(app);  
                                plus.ios.deleteObject(UIApplication);

##2、定位
###判断定位权限是否开启

                                var cllocationManger = plus.ios.import("CLLocationManager");  
				var enable = cllocationManger.locationServicesEnabled();  
				var status = cllocationManger.authorizationStatus();  
				console.log("enable:" + enable);  
				console.log("status:" + status);  
				if (enable && status != 2) {  
					console.log("手机系统的定位已经打开");  
				} else {  
					console.log("手机系统的定位没有打开");  
				}  
                             plus.ios.deleteObject(cllocationManger);

##3、麦克风
###判断麦克风权限是否开启

                                var avaudiosession = plus.ios.import("AVAudioSession");  
				var avaudio = avaudiosession.sharedInstance();  
				var permissionStatus = avaudio.recordPermission();  
				console.log("permissionStatus:" + permissionStatus);  
				if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {   
					console.log("麦克风权限没有开启");  
				} else {  
					console.log("麦克风权限已经开启");  
				}  
                    plus.ios.deleteObject(avaudiosession);

##4、相机
###判断相机权限是否开启

                               var AVCaptureDevice = plus.ios.import("AVCaptureDevice");  
				var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');  
				console.log("authStatus:" + authStatus);  
				if (authStatus == 3) {  
					console.log("相机权限已经开启");  
				} else {  
					console.log("相机权限没有开启");  
				}  
                    plus.ios.deleteObject(AVCaptureDevice);

##5、相册
###判断相册权限是否开启

                              var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");  
				var authStatus = PHPhotoLibrary.authorizationStatus();  
				console.log("authStatus:" + authStatus);  
				if (authStatus == 3) {  
					console.log("相册权限已经开启");  
				} else  {  
					console.log("相册权限没有开启");  
				}  
                    plus.ios.deleteObject(PHPhotoLibrary);

##6、通讯录
###判断通讯录权限是否开启

                              var CNContactStore = plus.ios.import("CNContactStore");  
				var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);  
				if (cnAuthStatus == 3) {  
					console.log("通讯录权限已经开启");  
				} else  {  
					console.log("通讯录权限没有开启");  
				}  
                    plus.ios.deleteObject(CNContactStore);

##7、日历
###判断日历权限是否开启

                              var EKEventStore = plus.ios.import("EKEventStore");  
			      var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);  
				if (ekAuthStatus == 3) {  
					console.log("日历权限已经开启");  
				} else  {  
					console.log("日历权限没有开启");  
				}  
                    plus.ios.deleteObject(EKEventStore);

##8、备忘录
###判断备忘录权限是否开启

                              var EKEventStore = plus.ios.import("EKEventStore");  
			      var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);  
				if (ekAuthStatus == 3) {  
					console.log("备忘录权限已经开启");  
				} else  {  
					console.log("备忘录权限没有开启");  
				}  
                    plus.ios.deleteObject(EKEventStore);

##9、网络
###判断网络是否开启

                              var cellularData = plus.ios.newObject("CTCellularData");  
				var state = cellularData.plusGetAttribute("restrictedState");  
				if (state == 2) {  
					console.log("已经开启了互联网权限:NotRestricted");  
				} else if (state == 0) {  
					console.log("StateUnknown");  
				} else if (state == 1) {  
					console.log("Restricted");  
				}  
                    plus.ios.deleteObject(cellularData);

##9、蓝牙
###判断蓝牙是否开启

判断蓝牙权限是否开启无法用native.js来写,可以用蓝牙模块的API, getBluetoothAdapterState(获取本机蓝牙适配器状态),onBluetoothAdapterStateChange(监听蓝牙适配器状态变化事件)来判断。

提示用户开启权限

跳转到应用的权限页面,下面写了一个提示框让用户去选择

                                      plus.nativeUI.confirm("XX权限没有开启,是否去开启?", function(e) {  
						if (e.index == 0) {  
							var UIApplication = plus.ios.import("UIApplication");  
							var application2 = UIApplication.sharedApplication();  
							var NSURL2 = plus.ios.import("NSURL");						  
							var setting2 = NSURL2.URLWithString("app-settings:");  
							application2.openURL(setting2);  
  
							plus.ios.deleteObject(setting2);  
							plus.ios.deleteObject(NSURL2);  
							plus.ios.deleteObject(application2);  
						}  
					}, {  
						"buttons": ["Yes", "No"],  
						"verticalAlign": "center"  
					});

安卓权限见:https://ask.dcloud.net.cn/article/35861

10 关注 分享
1***@qq.com 靓崽 skysowe 7***@qq.com 271355477qq 2***@qq.com 7***@qq.com r***@qq.com 流云12138 无所谓001

要回复文章请先登录注册

8***@qq.com

8***@qq.com

你好,怎么跳转系统-设置-蓝牙
2023-09-06 09:59
zhaoyu2020

zhaoyu2020

我想知道怎么打开ios,日历的权限,或者说触发提示打开ios的日历权限
2023-07-10 11:14
c***@guiyun.com

c***@guiyun.com

网络权限判断不了
2021-12-05 11:39
3***@qq.com

3***@qq.com

回复 CLP :
求救啊,我调试能获取到定位数据,云打包后,就提示没权限了呢?
2020-11-18 18:02
CLP

CLP (作者)

回复 易软 :
这个网络的方法好像不太准,点击快了,会变化,你先绕过吧
2020-11-06 12:46
易软

易软

回复 CLP :
测了一下 X ios 12 的机型 结果是什么都没有弹出
2020-11-03 09:27
易软

易软

回复 CLP :
其他的机型还没有测试
2020-11-03 09:02
CLP

CLP (作者)

回复 易软 :
其他机型和系统版本的也是一样的吗?
2020-11-02 18:40
易软

易软

回复 易软 :
// #ifdef APP-PLUS

// var cellularData = plus.ios.newObject("CTCellularData");
// var state = cellularData.plusGetAttribute("restrictedState");
// if (state == 2) {
// console.log("已经开启了互联网权限:NotRestricted");
// } else if (state == 0) {
// uni.showToast({
// icon:"none",
// title:"应用网络状态未知"
// });
// } else if (state == 1) {
// uni.showToast({
// icon:"none",
// title:"应用网络权限受限"
// });
// }
// plus.ios.deleteObject(cellularData);


// #endif
一直弹出应用网络状态未知
2020-11-02 18:03
易软

易软

回复 CLP :
确定 才测试了
2020-11-02 18:02