permission.plugins.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. let isIos = false;
  2. // #ifdef APP-PLUS
  3. isIos = (plus.os.name === 'iOS')
  4. // #endif
  5. // 判断安卓主方法
  6. function requestAndroidPermission(permissionID, ifRequest) {
  7. return new Promise((resolve, reject) => {
  8. plus.android.requestPermissions([permissionID], onSuccess, onError)
  9. function onSuccess(res) {
  10. const grantedList = res.granted
  11. const deniedList = res.deniedPresent
  12. const deniedAlwaysList = res.deniedAlways
  13. if (grantedList.includes(permissionID)) {
  14. resolve(true)
  15. } else {
  16. resolve(false)
  17. ifRequest && gotoAppPermissionSetting()
  18. }
  19. }
  20. function onError(err) {
  21. reject(err)
  22. }
  23. })
  24. }
  25. // 分别判断Ios
  26. function judgeIosPermissionPush(ifRequest) {
  27. return new Promise(resolve => {
  28. var UIApplication = plus.ios.import("UIApplication");
  29. var app = UIApplication.sharedApplication();
  30. var enabledTypes = 0;
  31. if (app.currentUserNotificationSettings) {
  32. var settings = app.currentUserNotificationSettings();
  33. enabledTypes = settings.plusGetAttribute("types");
  34. if (enabledTypes == 0) {
  35. ifRequest && gotoAppPermissionSetting()
  36. resolve(false)
  37. } else {
  38. resolve(true)
  39. }
  40. plus.ios.deleteObject(settings);
  41. } else {
  42. enabledTypes = app.enabledRemoteNotificationTypes();
  43. if (enabledTypes == 0) {
  44. ifRequest && gotoAppPermissionSetting()
  45. resolve(false)
  46. } else {
  47. resolve(true)
  48. }
  49. }
  50. plus.ios.deleteObject(app);
  51. plus.ios.deleteObject(UIApplication);
  52. })
  53. }
  54. // 判断定位权限是否开启
  55. function judgeIosPermissionLocation(ifRequest) {
  56. return new Promise(resolve => {
  57. var cllocationManger = plus.ios.import("CLLocationManager");
  58. var status = cllocationManger.authorizationStatus();
  59. if (status == 2) {
  60. ifRequest && gotoAppPermissionSetting()
  61. resolve(false)
  62. } else {
  63. resolve(true)
  64. }
  65. plus.ios.deleteObject(cllocationManger);
  66. })
  67. }
  68. // 判断麦克风权限是否开启
  69. function judgeIosPermissionRecord(ifRequest) {
  70. return new Promise(resolve => {
  71. var avaudiosession = plus.ios.import("AVAudioSession");
  72. var avaudio = avaudiosession.sharedInstance();
  73. var permissionStatus = avaudio.recordPermission();
  74. if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
  75. ifRequest && gotoAppPermissionSetting()
  76. resolve(false)
  77. } else {
  78. resolve(true)
  79. }
  80. plus.ios.deleteObject(avaudiosession);
  81. })
  82. }
  83. // 判断相机权限是否开启
  84. function judgeIosPermissionCamera(ifRequest) {
  85. return new Promise(resolve => {
  86. var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
  87. var authStatus = AVCaptureDevice.authorizationStatusForMediaType('video');
  88. if (authStatus == 3) {
  89. resolve(true)
  90. } else {
  91. ifRequest && gotoAppPermissionSetting()
  92. resolve(false)
  93. }
  94. plus.ios.deleteObject(AVCaptureDevice);
  95. })
  96. }
  97. // 判断相册权限是否开启
  98. function judgeIosPermissionPhotoLibrary(ifRequest) {
  99. return new Promise(resolve => {
  100. var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
  101. var authStatus = PHPhotoLibrary.authorizationStatus();
  102. if (authStatus == 3) {
  103. resolve(true)
  104. } else {
  105. ifRequest && gotoAppPermissionSetting()
  106. resolve(false)
  107. }
  108. plus.ios.deleteObject(PHPhotoLibrary);
  109. })
  110. }
  111. // 判断通讯录权限是否开启
  112. function judgeIosPermissionContact(ifRequest) {
  113. return new Promise(resolve => {
  114. var CNContactStore = plus.ios.import("CNContactStore");
  115. var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
  116. if (cnAuthStatus == 3) {
  117. resolve(true)
  118. } else {
  119. ifRequest && gotoAppPermissionSetting()
  120. resolve(false)
  121. }
  122. plus.ios.deleteObject(CNContactStore);
  123. })
  124. }
  125. // 判断所有权限
  126. function getPermisson(permisson, ifRequest = false) {
  127. switch (permisson) {
  128. case "location":
  129. if (isIos) {
  130. return judgeIosPermissionLocation(ifRequest)
  131. } else {
  132. return requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", ifRequest)
  133. }
  134. break;
  135. case "camera":
  136. if (isIos) {
  137. return judgeIosPermissionCamera(ifRequest)
  138. } else {
  139. return requestAndroidPermission("android.permission.CAMERA", ifRequest)
  140. }
  141. break;
  142. case "photo":
  143. if (isIos) {
  144. return judgeIosPermissionPhotoLibrary(ifRequest)
  145. } else {
  146. return requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE", ifRequest)
  147. }
  148. break;
  149. case "record":
  150. if (isIos) {
  151. return judgeIosPermissionRecord(ifRequest)
  152. } else {
  153. return requestAndroidPermission("android.permission.RECORD_AUDIO", ifRequest)
  154. }
  155. break;
  156. case "contact":
  157. if (isIos) {
  158. return judgeIosPermissionContact(ifRequest)
  159. } else {
  160. return requestAndroidPermission("android.permission.READ_CONTACTS", ifRequest)
  161. }
  162. break;
  163. case "call":
  164. if (isIos) {
  165. return Promise.resolve(true)
  166. } else {
  167. return requestAndroidPermission("android.permission.CALL_PHONE", ifRequest)
  168. }
  169. break;
  170. case "push":
  171. if (isIos) {
  172. return judgeIosPermissionPush(ifRequest)
  173. } else {
  174. return Promise.resolve(true)
  175. }
  176. break;
  177. default:
  178. break;
  179. }
  180. }
  181. // 去设置
  182. function gotoAppPermissionSetting() {
  183. if (isIos) {
  184. var UIApplication = plus.ios.import("UIApplication");
  185. var application2 = UIApplication.sharedApplication();
  186. var NSURL2 = plus.ios.import("NSURL");
  187. // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
  188. var setting2 = NSURL2.URLWithString("app-settings:");
  189. application2.openURL(setting2);
  190. plus.ios.deleteObject(setting2);
  191. plus.ios.deleteObject(NSURL2);
  192. plus.ios.deleteObject(application2);
  193. } else {
  194. var Intent = plus.android.importClass("android.content.Intent");
  195. var Settings = plus.android.importClass("android.provider.Settings");
  196. var Uri = plus.android.importClass("android.net.Uri");
  197. var mainActivity = plus.android.runtimeMainActivity();
  198. var intent = new Intent();
  199. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  200. var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
  201. intent.setData(uri);
  202. mainActivity.startActivity(intent);
  203. }
  204. }
  205. // 检查是否开启了定位
  206. function checkSystemEnableLocation() {
  207. if (isIos) {
  208. var result = false;
  209. var cllocationManger = plus.ios.import("CLLocationManager");
  210. var result = cllocationManger.locationServicesEnabled();
  211. plus.ios.deleteObject(cllocationManger);
  212. return result;
  213. } else {
  214. var context = plus.android.importClass("android.content.Context");
  215. var locationManager = plus.android.importClass("android.location.LocationManager");
  216. var main = plus.android.runtimeMainActivity();
  217. var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
  218. var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
  219. return result
  220. }
  221. }
  222. export default {
  223. getPermisson,
  224. checkSystemEnableLocation
  225. }