Commit 84e7df9fdc91cd90e75a26979a73cffec14d8c82

Authored by fengtao
1 parent 0395931d

feat:app端 上传个人头像新增相机相册权限

  1 +{
  2 + "prompt" : "none"
  3 +}
... ...
  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 +}
... ...