Showing
2 changed files
with
275 additions
and
0 deletions
androidPrivacy.json
0 → 100644
js_sdk/wa-permission/permission.js
0 → 100644
| 1 | +/** | |
| 2 | + * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 | |
| 3 | + */ | |
| 4 | + | |
| 5 | +var isIos | |
| 6 | +// #ifdef APP-PLUS | |
| 7 | +isIos = (plus.os.name == "iOS") | |
| 8 | +// #endif | |
| 9 | + | |
| 10 | +// 判断推送权限是否开启 | |
| 11 | +function judgeIosPermissionPush() { | |
| 12 | + var result = false; | |
| 13 | + var UIApplication = plus.ios.import("UIApplication"); | |
| 14 | + var app = UIApplication.sharedApplication(); | |
| 15 | + var enabledTypes = 0; | |
| 16 | + if (app.currentUserNotificationSettings) { | |
| 17 | + var settings = app.currentUserNotificationSettings(); | |
| 18 | + enabledTypes = settings.plusGetAttribute("types"); | |
| 19 | + console.log("enabledTypes1:" + enabledTypes); | |
| 20 | + if (enabledTypes == 0) { | |
| 21 | + console.log("推送权限没有开启"); | |
| 22 | + } else { | |
| 23 | + result = true; | |
| 24 | + console.log("已经开启推送功能!") | |
| 25 | + } | |
| 26 | + plus.ios.deleteObject(settings); | |
| 27 | + } else { | |
| 28 | + enabledTypes = app.enabledRemoteNotificationTypes(); | |
| 29 | + if (enabledTypes == 0) { | |
| 30 | + console.log("推送权限没有开启!"); | |
| 31 | + } else { | |
| 32 | + result = true; | |
| 33 | + console.log("已经开启推送功能!") | |
| 34 | + } | |
| 35 | + console.log("enabledTypes2:" + enabledTypes); | |
| 36 | + } | |
| 37 | + plus.ios.deleteObject(app); | |
| 38 | + plus.ios.deleteObject(UIApplication); | |
| 39 | + return result; | |
| 40 | +} | |
| 41 | + | |
| 42 | +// 判断定位权限是否开启 | |
| 43 | +function judgeIosPermissionLocation() { | |
| 44 | + var result = false; | |
| 45 | + var cllocationManger = plus.ios.import("CLLocationManager"); | |
| 46 | + var status = cllocationManger.authorizationStatus(); | |
| 47 | + result = (status != 2) | |
| 48 | + console.log("定位权限开启:" + result); | |
| 49 | + // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation | |
| 50 | + /* var enable = cllocationManger.locationServicesEnabled(); | |
| 51 | + var status = cllocationManger.authorizationStatus(); | |
| 52 | + console.log("enable:" + enable); | |
| 53 | + console.log("status:" + status); | |
| 54 | + if (enable && status != 2) { | |
| 55 | + result = true; | |
| 56 | + console.log("手机定位服务已开启且已授予定位权限"); | |
| 57 | + } else { | |
| 58 | + console.log("手机系统的定位没有打开或未给予定位权限"); | |
| 59 | + } */ | |
| 60 | + plus.ios.deleteObject(cllocationManger); | |
| 61 | + return result; | |
| 62 | +} | |
| 63 | + | |
| 64 | +// 判断麦克风权限是否开启 | |
| 65 | +function judgeIosPermissionRecord() { | |
| 66 | + var result = false; | |
| 67 | + var avaudiosession = plus.ios.import("AVAudioSession"); | |
| 68 | + var avaudio = avaudiosession.sharedInstance(); | |
| 69 | + var permissionStatus = avaudio.recordPermission(); | |
| 70 | + console.log("permissionStatus:" + permissionStatus); | |
| 71 | + if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { | |
| 72 | + console.log("麦克风权限没有开启"); | |
| 73 | + } else { | |
| 74 | + result = true; | |
| 75 | + console.log("麦克风权限已经开启"); | |
| 76 | + } | |
| 77 | + plus.ios.deleteObject(avaudiosession); | |
| 78 | + return result; | |
| 79 | +} | |
| 80 | + | |
| 81 | +// 判断相机权限是否开启 | |
| 82 | +function judgeIosPermissionCamera() { | |
| 83 | + var result = false; | |
| 84 | + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); | |
| 85 | + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); | |
| 86 | + console.log("authStatus:" + authStatus); | |
| 87 | + if (authStatus == 3) { | |
| 88 | + result = true; | |
| 89 | + console.log("相机权限已经开启"); | |
| 90 | + } else { | |
| 91 | + console.log("相机权限没有开启"); | |
| 92 | + } | |
| 93 | + plus.ios.deleteObject(AVCaptureDevice); | |
| 94 | + return result; | |
| 95 | +} | |
| 96 | + | |
| 97 | +// 判断相册权限是否开启 | |
| 98 | +function judgeIosPermissionPhotoLibrary() { | |
| 99 | + var result = false; | |
| 100 | + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); | |
| 101 | + var authStatus = PHPhotoLibrary.authorizationStatus(); | |
| 102 | + console.log("authStatus:" + authStatus); | |
| 103 | + if (authStatus == 3) { | |
| 104 | + result = true; | |
| 105 | + console.log("相册权限已经开启"); | |
| 106 | + } else { | |
| 107 | + console.log("相册权限没有开启"); | |
| 108 | + } | |
| 109 | + plus.ios.deleteObject(PHPhotoLibrary); | |
| 110 | + return result; | |
| 111 | +} | |
| 112 | + | |
| 113 | +// 判断通讯录权限是否开启 | |
| 114 | +function judgeIosPermissionContact() { | |
| 115 | + var result = false; | |
| 116 | + var CNContactStore = plus.ios.import("CNContactStore"); | |
| 117 | + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); | |
| 118 | + if (cnAuthStatus == 3) { | |
| 119 | + result = true; | |
| 120 | + console.log("通讯录权限已经开启"); | |
| 121 | + } else { | |
| 122 | + console.log("通讯录权限没有开启"); | |
| 123 | + } | |
| 124 | + plus.ios.deleteObject(CNContactStore); | |
| 125 | + return result; | |
| 126 | +} | |
| 127 | + | |
| 128 | +// 判断日历权限是否开启 | |
| 129 | +function judgeIosPermissionCalendar() { | |
| 130 | + var result = false; | |
| 131 | + var EKEventStore = plus.ios.import("EKEventStore"); | |
| 132 | + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); | |
| 133 | + if (ekAuthStatus == 3) { | |
| 134 | + result = true; | |
| 135 | + console.log("日历权限已经开启"); | |
| 136 | + } else { | |
| 137 | + console.log("日历权限没有开启"); | |
| 138 | + } | |
| 139 | + plus.ios.deleteObject(EKEventStore); | |
| 140 | + return result; | |
| 141 | +} | |
| 142 | + | |
| 143 | +// 判断备忘录权限是否开启 | |
| 144 | +function judgeIosPermissionMemo() { | |
| 145 | + var result = false; | |
| 146 | + var EKEventStore = plus.ios.import("EKEventStore"); | |
| 147 | + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); | |
| 148 | + if (ekAuthStatus == 3) { | |
| 149 | + result = true; | |
| 150 | + console.log("备忘录权限已经开启"); | |
| 151 | + } else { | |
| 152 | + console.log("备忘录权限没有开启"); | |
| 153 | + } | |
| 154 | + plus.ios.deleteObject(EKEventStore); | |
| 155 | + return result; | |
| 156 | +} | |
| 157 | + | |
| 158 | +// Android权限查询 | |
| 159 | +function requestAndroidPermission(permissionID) { | |
| 160 | + return new Promise((resolve, reject) => { | |
| 161 | + plus.android.requestPermissions( | |
| 162 | + [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 | |
| 163 | + function(resultObj) { | |
| 164 | + var result = 0; | |
| 165 | + for (var i = 0; i < resultObj.granted.length; i++) { | |
| 166 | + var grantedPermission = resultObj.granted[i]; | |
| 167 | + console.log('已获取的权限:' + grantedPermission); | |
| 168 | + result = 1 | |
| 169 | + } | |
| 170 | + for (var i = 0; i < resultObj.deniedPresent.length; i++) { | |
| 171 | + var deniedPresentPermission = resultObj.deniedPresent[i]; | |
| 172 | + console.log('拒绝本次申请的权限:' + deniedPresentPermission); | |
| 173 | + result = 0 | |
| 174 | + } | |
| 175 | + for (var i = 0; i < resultObj.deniedAlways.length; i++) { | |
| 176 | + var deniedAlwaysPermission = resultObj.deniedAlways[i]; | |
| 177 | + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); | |
| 178 | + result = -1 | |
| 179 | + } | |
| 180 | + resolve(result); | |
| 181 | + // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 | |
| 182 | + // if (result != 1) { | |
| 183 | + // gotoAppPermissionSetting() | |
| 184 | + // } | |
| 185 | + }, | |
| 186 | + function(error) { | |
| 187 | + console.log('申请权限错误:' + error.code + " = " + error.message); | |
| 188 | + resolve({ | |
| 189 | + code: error.code, | |
| 190 | + message: error.message | |
| 191 | + }); | |
| 192 | + } | |
| 193 | + ); | |
| 194 | + }); | |
| 195 | +} | |
| 196 | + | |
| 197 | +// 使用一个方法,根据参数判断权限 | |
| 198 | +function judgeIosPermission(permissionID) { | |
| 199 | + if (permissionID == "location") { | |
| 200 | + return judgeIosPermissionLocation() | |
| 201 | + } else if (permissionID == "camera") { | |
| 202 | + return judgeIosPermissionCamera() | |
| 203 | + } else if (permissionID == "photoLibrary") { | |
| 204 | + return judgeIosPermissionPhotoLibrary() | |
| 205 | + } else if (permissionID == "record") { | |
| 206 | + return judgeIosPermissionRecord() | |
| 207 | + } else if (permissionID == "push") { | |
| 208 | + return judgeIosPermissionPush() | |
| 209 | + } else if (permissionID == "contact") { | |
| 210 | + return judgeIosPermissionContact() | |
| 211 | + } else if (permissionID == "calendar") { | |
| 212 | + return judgeIosPermissionCalendar() | |
| 213 | + } else if (permissionID == "memo") { | |
| 214 | + return judgeIosPermissionMemo() | |
| 215 | + } | |
| 216 | + return false; | |
| 217 | +} | |
| 218 | + | |
| 219 | +// 跳转到**应用**的权限页面 | |
| 220 | +function gotoAppPermissionSetting() { | |
| 221 | + if (isIos) { | |
| 222 | + var UIApplication = plus.ios.import("UIApplication"); | |
| 223 | + var application2 = UIApplication.sharedApplication(); | |
| 224 | + var NSURL2 = plus.ios.import("NSURL"); | |
| 225 | + // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); | |
| 226 | + var setting2 = NSURL2.URLWithString("app-settings:"); | |
| 227 | + application2.openURL(setting2); | |
| 228 | + | |
| 229 | + plus.ios.deleteObject(setting2); | |
| 230 | + plus.ios.deleteObject(NSURL2); | |
| 231 | + plus.ios.deleteObject(application2); | |
| 232 | + } else { | |
| 233 | + // console.log(plus.device.vendor); | |
| 234 | + var Intent = plus.android.importClass("android.content.Intent"); | |
| 235 | + var Settings = plus.android.importClass("android.provider.Settings"); | |
| 236 | + var Uri = plus.android.importClass("android.net.Uri"); | |
| 237 | + var mainActivity = plus.android.runtimeMainActivity(); | |
| 238 | + var intent = new Intent(); | |
| 239 | + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); | |
| 240 | + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); | |
| 241 | + intent.setData(uri); | |
| 242 | + mainActivity.startActivity(intent); | |
| 243 | + } | |
| 244 | +} | |
| 245 | + | |
| 246 | +// 检查系统的设备服务是否开启 | |
| 247 | +// var checkSystemEnableLocation = async function () { | |
| 248 | +function checkSystemEnableLocation() { | |
| 249 | + if (isIos) { | |
| 250 | + var result = false; | |
| 251 | + var cllocationManger = plus.ios.import("CLLocationManager"); | |
| 252 | + var result = cllocationManger.locationServicesEnabled(); | |
| 253 | + console.log("系统定位开启:" + result); | |
| 254 | + plus.ios.deleteObject(cllocationManger); | |
| 255 | + return result; | |
| 256 | + } else { | |
| 257 | + var context = plus.android.importClass("android.content.Context"); | |
| 258 | + var locationManager = plus.android.importClass("android.location.LocationManager"); | |
| 259 | + var main = plus.android.runtimeMainActivity(); | |
| 260 | + var mainSvr = main.getSystemService(context.LOCATION_SERVICE); | |
| 261 | + var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); | |
| 262 | + console.log("系统定位开启:" + result); | |
| 263 | + return result | |
| 264 | + } | |
| 265 | +} | |
| 266 | + | |
| 267 | +module.exports = { | |
| 268 | + judgeIosPermission: judgeIosPermission, | |
| 269 | + requestAndroidPermission: requestAndroidPermission, | |
| 270 | + checkSystemEnableLocation: checkSystemEnableLocation, | |
| 271 | + gotoAppPermissionSetting: gotoAppPermissionSetting | |
| 272 | +} | ... | ... |