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 | +} |