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